[gelöst] Template.php - Eigenen Link in Nodelinks-Bereich einbinden
am 24.08.2013 - 13:56 Uhr in
Hallo zusammen,
auf meiner Website möchte ich gerne in den "Node Links" (an der Stelle ist auch der "Neuen Kommentar schreiben"-Link zu finden) eines bestimmten Inhaltstyps (bei mir "Hotel") einen eigenen Link hinzufügen.
Aber nur dann, wenn der eingeloggte Nutzer mindestens eine von drei Nutzerrollen besitzt (bei mir "Privatnutzer", "Hotelier" und "administrator").
Nach verschiedenen Recherchen im Netz hab ich mir jetzt mal folgende Function zusammengestrickt:
<?php
function globewheeler_node_view_alter(&$build) {
if ($build['#bundle'] == 'hotel'){
global $user;
if ( (in_array('Hotelier', $user->roles)) or (in_array('Privatnutzer', $user->roles)) or (in_array('administrator', $user->roles)) ) {
$build['links']['node']['#links']['add-hotel-image'] = array(
'title' => t('Upload a hotel image'),
'href' => 'node/add/hotelbild',
'html' => TRUE,
'attributes' => array(
'title' => t('Upload a new hotel image!'),
'query' => array('param1' => '10'),
),
);
}
}
}
?>
Ich habe versucht, hier eine Parameterübergabe einzubauen, die an den Link angehängt werden soll. Diese wird aber einfach ignoriert. Ansonsten funktioniert die Generierung des Links einwandfrei.
Ist der Query-Filter unzulässig? In der API konnte ich leider keine Lösung finden. Hat jemand eine Idee wo mein Fehler stecken könnte?
Danke schon mal für eure Hilfe.
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich wuerde es mal mit
am 25.08.2013 - 09:33 Uhr
Ich wuerde es mal mit globewheeler_preprocess_node(&$variables) versuchen.
Da geht noch was.
Danke für den Tipp. Hab es
am 25.08.2013 - 16:45 Uhr
Danke für den Tipp. Hab es mal damit versucht, kann aber von der Funktion aus - so wie mir scheint - nicht auf die Links zugreifen (zumindest wirft mir
<?php
kpr($variables['node']);
?>
Wenn ich
<?php
kpr($variables);
?>
Wenn ich in meinem Code-Beispiel (vom Erstbeitrag dieses Threads) die Parameter einfach an den Link ranhänge (etwa so :
'href' => 'node/add/hotelbild?param1=wert1',
), werden das Fragezeichen und das Gleichheitszeichen inhotelbild%3Fparam1%3Dwert1
umgewandelt.Mein Code basiert auf dem Beispiel von hier. Das mit der Parameterübergabe hab ich von hier. Kann zwar grundsätzlich PHP, aber sich in die API von D 7 reinzudenken ist echt nicht ohne.
Gibt es evtl. noch eine Lösung?
meine Drupal-Websites:
http://www.mathetreff-online.de
http://www.globewheeler.com
Hab es jetzt mal mit preprocess_node probiert
am 06.09.2013 - 15:31 Uhr
Hallo zusammen,
konnte jetzt mein Code-Beispiel auf preprocess_node umschreiben, leider ohne Erfolg.
Hier mein Code:
<?php
function globewheeler_preprocess_node(&$variables, $hook) {
global $user;
if ( (in_array('Hotelier', $user->roles)) or (in_array('Privatnutzer', $user->roles)) or (in_array('administrator', $user->roles)) ) {
$variables['content']['links']['node']['#links']['add-hotel-image'] = array(
'title' => t('Upload a hotel image'),
'href' => 'node/add/hotelbild',
'html' => TRUE,
'attributes' => array(
'title' => t('Upload a new hotel image!'),
'query' => array(
'param1' => '10'
)
),
);
}
}
?>
Ohne $get-Parameter am Link ist alles prima. Nur sobald ich versuche einen Parameter dranzuhängen (Parameterschlüssel ist "param1", der Wert ist "10") wird dieser einfach ignoriert. So langsam bin ich echt ratlos. Hat keiner eine Idee?
Danke und Grüße
meine Drupal-Websites:
http://www.mathetreff-online.de
http://www.globewheeler.com
'html' => TRUE falsch platziert
am 06.09.2013 - 15:42 Uhr
Die Verwendung von
<?php
'html' => TRUE,
?>
Siehe Link zur API l() Funktion.
Kannst Du weglassen wenn der Link nur Text ist.
Da geht noch was.
Danke dir, hab ich jetzt
am 06.09.2013 - 16:12 Uhr
Danke dir, hab ich jetzt entfernt.
Der Link-Bereich in den Nodes wird ja über theme_links() generiert.
Wenn ich die API-Doku richtig verstanden habe, wird ja der Link vom "href"-Teil an die l()-Funktion zum parsen übergeben.
Die l()-Funktion wiederum lässt im "attributes"-Teil Parameter aus der url()-Funktion zu.
Additional $options elements used by the url() function.
.
Somit sollte eigentlich der "query"-Parameter für get-Werte zulässig sein oder? Ist meine Syntax hier irgendwie falsch? Kann natürlich auch sein, dass ich den Wald vor lauter Bäumen nicht sehe ;)
meine Drupal-Websites:
http://www.mathetreff-online.de
http://www.globewheeler.com
Jetzt hab ich's :)
am 06.09.2013 - 16:53 Uhr
Mit diesem Code geht es jetzt *freu*:
<?php
function globewheeler_preprocess_node(&$variables, $hook) {
global $user;
if ( (in_array('Hotelier', $user->roles)) or (in_array('Privatnutzer', $user->roles)) or (in_array('administrator', $user->roles)) ) {
$variables['content']['links']['node']['#links']['add-hotel-image'] = array(
'title' => t('Upload a hotel image'),
'href' => 'node/add/hotelbild',
'attributes' => array(
'title' => t('Upload a new hotel image!')
),
'query' => array(
'param1' => 'wert1'
),
);
}
}
?>
Mein Fehler war, dass der 'query'-Teil nicht im 'attributes'-Array verschachtelt ist. Danke nochmal an alle, die mir geholfen haben!
Viele Grüße
Philipp
meine Drupal-Websites:
http://www.mathetreff-online.de
http://www.globewheeler.com