0

現在、Web サイトに「サービス」というタイトルのサイド バーがあり、「Windows」、「Linux」、「Android」などのカテゴリを入力したいと考えています。これらの「カテゴリ」はすべて 1 つのページ (services.php) に存在するため、クイック リンクのリスト (services.php/#Windows、services.php/# Linux など)。私がやりたいことは、PHP 関数を使用して、Services.phpページ上で作成したすべてのアンカーをサイド バーにプルすることです。これにより、services.php を編集して includeすると、サイド バー<a id="tips">Other useful things</a>にそのアンカーへのリンクが自動的に含まれます。 . 「このページのアンカーごとに、thispage.php/#anchor-name へのリンクを作成する」のようなものです。

この質問が最初の質問よりも理解しやすいことを願っています。私はあまり明確ではなかったことに気づきました。

これにデータベース テーブルを使用できることは承知していますが、管理を非常に簡単にしたいと考えています。

4

2 に答える 2

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コメントに基づいて編集:

何らかの方法で「タグ付け」しない限り、それは簡単ではありません。1 つの方法は、各アンカーにクラスを追加してから、ドキュメント全体を横断することです。

例:

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;
}
于 2012-11-04T13:36:25.137 に答える
1

linkaと a の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>

これは、あなたの望むことですか?

于 2012-11-04T13:07:48.827 に答える