我目前在我的网站上有一个侧栏,标题为“服务”,我希望填写“Windows”,“Linux”,“Android”等类别。由于所有这些“类别”都存在于一个页面(services.php)中,我有一个想法来锚定它们中的每一个,所以我可以创建一个快速链接列表(services.php / #Windows,services.php /# Linux等等)。我想要做的是使用PHP函数将我在Services.php
页面上创建的所有锚点拉到侧栏中,这样如果我编辑services.php并包含<a id="tips">Other useful things</a>
,侧栏自动包含指向该锚点的链接。类似于“对于此页面上的每个锚点,链接到thispage.php /#anchor-name”。
我希望这个问题比我的第一个更容易理解。我意识到我不是很清楚。
我知道我可以使用数据库表,但我希望管理起来非常简单。
答案 0 :(得分:5)
一般答案:
例如,假设您有一个导航栏,其中id = anchors,您的锚点会停留在其中。
示例HTML:
$html = '<html>(...)
<div id="anchors">
<a href="anchor1.php">link number 1</a>
<a href="anchor2.php">another link</a>
</div>
(...)
</html>';
示例功能:
function findAnchors($html)
{
$links = array();
$doc = new DOMDocument();
$doc->loadHTML($html);
$navbars = $doc->getElementsByTagName('div');
foreach ($navbars as $navbar) {
$id = $navbar->getAttribute('id');
if ($id === "anchors") {
$anchors = $navbar->getElementsByTagName('a');
foreach ($anchors as $a) {
$links[] = $doc->saveHTML($a);
}
}
}
return $links;
}
这将返回一个包含所有链接的数组。
输出:
array
0 => string '<a href="anchor1.php">link number 1</a>' (length=39)
1 => string '<a href="anchor2.php">another link</a>' (length=38)
根据OP评论进行编辑:
除非你以某种方式“标记”它们,否则它并非无足轻重。一种方法是为每个锚添加一个类,然后横向整个文档。
示例:
HTML
$html = '<html>(...)
<a class="anchor" href="anchor1.php">link number 1</a>
(... stuff in here)
<a class="anchor" href="anchor2.php">another link</a>
(...)
</html>';
功能:
function findAnchors($html)
{
$links = array();
$doc = new DOMDocument();
$doc->loadHTML($html);
$aTags = $doc->getElementsByTagName('a');
foreach ($aTags as $a) {
$class = $a->getAttribute('class');
if ($class === "anchor") {
$links[] = $doc->saveHTML($a);
}
}
return $links;
}
答案 1 :(得分:1)
如果你想拥有link
和name
对之类的东西,是的,你将在这里使用foreach()
功能。说你有类似的东西:
$links = array(
"index.html" => "Home",
"about.html" => "About Us",
"contact.html" => "Contact Us"
);
您可以使用此代码显示它:
foreach ($links as $link => $name) {
echo "<a href=\"$link\">'$name'</a>";
}
它以这种方式显示:
<a href="index.html">Home</a>
<a href="about.html">About Us</a>
<a href="contact.html">Contact Us</a>
这是你想要的吗?