Undefined variable node
am 02.06.2015 - 00:31 Uhr in
Hallo,
bin gerade dabei etwas an meinem Theme zu basteln und stoße nun auf folgendes Problem. Es wird mir diese Fehlermeldung angezeigt.
Notice: Undefined variable: node in include() (Zeile 3 von C:\xampp\htdocs\sites\all\themes\xxx\templates\dropdown-menu.php).
dropdown-menu.php sieht wie folgt aus:
<?php
if (user_access('translate content')) {
if ($node) print '<div class="node-dropdown">'
.'<div class="dropdown">'
.'<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-expanded="true">'
.'<span class="glyphicon glyphicon-cog" aria-hidden="true">'.'</span>'
.'<span class="caret">'.'</span>'
.'</button>'
.'<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dropdownMenu1">'
.'<li role="presentation">'.l(t('Edit'),'node/'.$node->nid.'/edit').'</li>'
.'<li role="presentation">'.l(t('Translate'),'node/'.$node->nid.'/translate').'</li>'
.'<li role="presentation" class="divider">'.'</li>'
.'<li role="presentation" class="delete">'.l(t('Delete'),'node/'.$node->nid.'/delete').'</li>'
.'</ul>'
.'</div>'.'</div>';
}
?>Soweit eigentlich auch gut, es wird das ausgegeben was ich mir vorgestellt habe. Das Menü wird nur bei Ansicht der vollständigen Node angezeigt, nicht im Teaser und auch nicht auf der Startseite (das war mein vorheriges Problem, welches ich allerdings mit $node in Zeile 3 gelöst habe). Trotz der korrekten Ausgabe, macht mich die Fehlermeldung stutzig. Bin eigentlich absoluter Anfänger in Sachen PHP und hab mir das irgendwie zusammengebastelt.
Kann mir dabei eventuell jemand helfen? Hab ich vielleicht etwas vergessen?
Vielen Dank,
LG
- Anmelden oder Registrieren um Kommentare zu schreiben

Hallo, versuchs mal mit
am 02.06.2015 - 07:32 Uhr
Hallo,
versuchs mal mit if(isset($node)).
isset prüft ob die Variable gesetzt wurde.
Es ist auch keine Fehlermeldung sondern eine Information (Notice).
Die könntest die Information in PHP abschalten unter error_reporting.
MfG
Robert
Danke, hat anscheinend
am 02.06.2015 - 14:52 Uhr
Danke, hat anscheinend funktioniert.
Allerdings tritt das Problem wieder auf, nachdem ich ein weiteren Eintrag hinzugefügt habe.
Neuer Eintrag Zeile 12:
if($node->type == 'webform') print '<li role="presentation">'.l(t('Webform'),'node/'.$node->nid.'/webform').'</li>'<?php
if (user_access('translate content')) {
if(isset($node)) print '<div class="node-dropdown">'
.'<div class="dropdown">'
.'<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-expanded="true">'
.'<span class="glyphicon glyphicon-cog" aria-hidden="true">'.'</span>'
.'<span class="caret">'.'</span>'
.'</button>'
.'<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dropdownMenu1">'
.'<li role="presentation">'.l(t('Edit'),'node/'.$node->nid.'/edit').'</li>'
.'<li role="presentation">'.l(t('Translate'),'node/'.$node->nid.'/translate').'</li>';
if($node->type == 'webform') print '<li role="presentation">'.l(t('Webform'),'node/'.$node->nid.'/webform').'</li>'
.'<li role="presentation" class="divider">'.'</li>'
.'<li role="presentation" class="delete">'.l(t('Delete'),'node/'.$node->nid.'/delete').'</li>'
.'</ul>'
.'</div>'.'</div>';
}
?>
Dieses mal werden auch 2 Nachrichten ausgespuckt.
Notice: Undefined variable: node in include() (Zeile 12 von C:\xampp\htdocs\sites\all\themes\xxx\templates\dropdown-menu.php).Notice: Trying to get property of non-object in include() (Zeile 12 von C:\xampp\htdocs\sites\all\themes\xxx\templates\dropdown-menu.php).
Die Klammerung fehlt
am 02.06.2015 - 15:02 Uhr
bei if(isset($node)) muss eine { folgen, die ganz am Ende wieder mit } geschlossen werden muss.
Ansonsten ist nur das command hinter dem if conditional.
Alles klar, vielen Dank.
am 02.06.2015 - 15:56 Uhr
Alles klar, vielen Dank. Läuft jetzt alles wunderbar. Wer sich so etwas auch vorstellen kann, ein Dropdown anstelle der Tabs, kann sich den Code gerne kopieren.
Benutzerdefinierte PHP-Datei erstellen z.B. dropdown-menu.php.
<?php
if (user_access('edit any content')) {
if(isset($node)) print '<div class="node-dropdown">'
.'<div class="dropdown">'
.'<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-expanded="true">'
.'<span class="glyphicon glyphicon-cog" aria-hidden="true">'.'</span>'
.'<span class="caret">'.'</span>'
.'</button>'
.'<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dropdownMenu1">'
.'<li role="presentation">'.l(t('Edit'),'node/'.$node->nid.'/edit').'</li>'
.'<li role="presentation">'.l(t('Translate'),'node/'.$node->nid.'/translate').'</li>';
if(user_access('edit any content')) {
if($node->type == 'webform') print '<li role="presentation">'.l(t('Webform'),'node/'.$node->nid.'/webform').'</li>';
if($node) print '<li role="presentation" class="divider">'.'</li>'
.'<li role="presentation" class="delete">'.l(t('Delete'),'node/'.$node->nid.'/delete').'</li>'
.'</ul>'
.'</div>'.'</div>';
}
}
?>
In die page.tpl.php:
<?phpinclude ("{$_SERVER['DOCUMENT_ROOT']}/sites/all/themes/xxx/templates/dropdown-menu.php");
?>
An gewünschte stelle einfügen. Sowie diese Zeilen entfernen:
<?phpif (!empty($tabs)):
?>
<?phpprint render($tabs);
?>
Mittels CSS alles weitere anpassen. In meinem Fall so:
h1 .node-dropdown {display: none;
}
h1:hover .node-dropdown {
display: block;
}
.node-dropdown {
margin-top: -40px;
margin-left: 100%;
}
.node-dropdown .dropdown .btn {
border-radius: 0;
}
.node-dropdown .dropdown li.delete a:hover {
background: #b73939;
color: #fff;
}
... Ich benutze im übrigen das Bootstrap theme. Dort ist die Funktion dropdown bereits integriert, sowie viele andere auch.
Resultate: