Wie schreibe ich Funktionen zum Erstellen und Anhängen von HTML-Elementen in PHP?
P粉814160988
P粉814160988 2024-03-30 21:45:27
0
1
488

Ich möchte Funktionen schreiben, die HTML-Elemente erstellen und untergeordnete Elemente aneinander anhängen, anstatt Teile des HTML-Codes wiederzugeben oder echo <<<HEREDOC zu verwenden.

createLoginBar 函数将创建一个 div,我会将其附加到其他 HTML 元素到我的 createLogoutBanner in Funktion.

function createLoginBar() {
    $dom = new DOMDocument();
    $login_bar = $dom->createElement('div');
    $login_bar->setAttribute("id", "login_bar");
    $dom->appendChild($login_bar);
    return $dom->saveHTML();
}

function createLogoutBanner() {
    $dom = new DOMDocument();
    $login_bar = createLoginBar();
    $login_flex = createBlankLoginFlex();
    $banner_login_form = createBannerLoginForm();
    $login_message_flex = createLoginMessageFlex();
    $nonmember_signup_flex = createNonSignupFlex();
    $not_a_member_form = createNotAMemberForm();

    $dom->appendChild($login_bar); //This line gives an error
    $login_bar->appendChild($login_flex);
    $login_flex->appendChild($banner_login_form);
    $login_bar->appendChild($login_message_flex);
    $login_bar->appendChild($nonmember_signup_flex);
    $nonmember_signup_flex->appendChild($not_a_member_form);
    return $dom->saveHTML();
}
Die Zeile

createLogoutBanner 函数中的 $dom->appendChild($login_bar); gibt den Fehler aus:

Schwerwiegender Fehler: Uncaught TypeError: DOMNode::appendChild(): Parameter #1 ($node) muss vom Typ DOMNode sein, angegeben als String.

P粉814160988
P粉814160988

Antworte allen(1)
P粉504080992

由于错误状态 DOMNode::appendChild() 期望传递一个 DOMNode
您的 createLoginBar 函数返回一个字符串而不是节点。
尝试以下更改:

function createLoginBar() {
    $dom = new DOMDocument();
    $login_bar = $dom->createElement('div');
    $login_bar->setAttribute("id", "login_bar");
    $dom->appendChild($login_bar);
    return $dom; //->saveHTML();
}

然后您将看到错误致命错误:未捕获的 DOMException:错误文档错误。这是因为您必须使用 DOMDocument 的相同父实例来创建子节点。不要在每个函数中创建一个新的 DOMDocument,而是创建一个顶级 DOMDocument 并将其传递给每个函数来使用。

function createLoginBar(DOMDocument $dom):DOMNode 
{
    $login_bar = $dom->createElement('div');
    // the following line will cause invalid html if this function is called more than once
    $login_bar->setAttribute("id", "login_bar");

    return $login_bar;
}
function createBtn(DOMDocument $dom, string $value):DOMNode 
{
    $btn = $dom->createElement('button', $value);
    $btn->setAttribute("class", "widget");

    return $btn;
}

$dom = new DOMDocument();
$login_bar = createLoginBar($dom);
$login_btn = createBtn($dom, 'login');

$login_bar->appendChild($login_btn);

$dom->appendChild($login_bar);

echo $dom->saveHTML();

结果:

沙箱

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage