码桶
发现社区成员的开源项目
links.php3 KB
<?php
/**
* 友链
*
*
*
* @package custom
*/
if (!defined('__TYPECHO_ROOT_DIR__')) exit; $this->need('header.php'); ?>
<div class="content-area">
<article class="page-content">
<h1 class="page-title links-title"><?php $this->title(); ?></h1>
<div class="page-content-inner">
<?php
$raw = strval($this->text);
$lines = preg_split('/\r\n|\r|\n/', $raw);
$introLines = [];
$listLines = [];
foreach ($lines as $line) {
$line = trim($line);
if ($line === '' || strpos($line, '#') === 0) continue;
if (strpos($line, ',') !== false || strpos($line, '|') !== false) {
$listLines[] = $line;
} else {
$introLines[] = $line;
}
}
if ($introLines):
?>
<div class="links-intro">
<?php foreach ($introLines as $intro): ?>
<p><?php echo strpos($intro, '<') === false ? htmlspecialchars($intro) : $intro; ?></p>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php if ($listLines): ?>
<div class="links-grid">
<?php foreach ($listLines as $line):
$parts = preg_split('/[,|]/u', $line, 3);
$name = trim($parts[0] ?? '');
$url = trim($parts[1] ?? '');
$icon = trim($parts[2] ?? '');
if ($name === '' || $url === '') continue;
if (!preg_match('#^https?://#i', $url)) $url = 'http://' . $url;
$host = parse_url($url, PHP_URL_HOST);
if ($icon === '' && $host) {
$icon = 'https://' . $host . '/favicon.ico';
}
$letter = mb_substr($name, 0, 1, 'UTF-8');
?>
<a class="links-item" href="<?php echo htmlspecialchars($url); ?>" target="_blank" rel="noopener nofollow">
<span class="links-item-icon">
<?php if ($icon): ?><img src="<?php echo htmlspecialchars($icon); ?>" alt="<?php echo htmlspecialchars($name); ?>" loading="lazy" onerror="this.parentNode.innerHTML='<span class="links-item-letter"><?php echo htmlspecialchars($letter); ?></span>'"><?php else: ?><span class="links-item-letter"><?php echo htmlspecialchars($letter); ?></span><?php endif; ?>
</span>
<span class="links-item-name"><?php echo htmlspecialchars($name); ?></span>
</a>
<?php endforeach; ?>
</div>
<?php else: ?>
<div class="links-empty"><?php $this->content(); ?></div>
<?php endif; ?>
</div>
</article>
</div>
<?php $this->need('footer.php'); ?>