[gelöst] "Flag Links" im Block anzeigen $uid? $node->uid?
am 08.08.2010 - 23:35 Uhr in
Nabend schön,
ich versuche gerade die Flag-Links in einem Block anzeigen zu lassen damit ich sie besser im User-Profile nutzen kann.
Zuerst habe ich diese generelle Anleitung durchgelesen. http://drupal.org/node/295383 - damit schaffe ich es den Link über die node.tpl.php einzubinden und frei positionieren zu können.
Nun sollen die Links aber in den Block - dazu gibt es hier eine Anleitung http://drupal.org/node/554548
Ich verwende im Block folgenden Code
<?php
//If in single node page
if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
//Load node to get nid
$node = node_load(arg(1));
//Print Flag link
print flag_create_link('bookmarks', $node->nid);
}
?>
Der Bookmark-Flag-Link wird aber nur im Node angezeigt - nicht auf der Profile-Page (ich nutze Content-Profile -> der Node ist ja gleichzeitg das Profile - er ist unter content/benny zu erreichen - das profile unter users/benny.)
Wenn ich nun content/benny aufrufe wird der Block mit dem Bookmark-Link angezeigt - rufe ich das Profile auf (users/benny) wird der Block nicht angezeigt.
Ich habe nun folgendes versucht
print flag_create_link('bookmarks', $node->uid);
print flag_create_link('bookmarks', $node->nid);
print flag_create_link('bookmarks', $account->uid);
print flag_create_link('bookmarks', $uid);
aber ich bekomme keine Ausgabe des Blocks im Profile.
Die Sichtbarkeit des Blocks wird nicht eingeschränkt/gefiltert.
Nun bin ich ratlos.
Wäre von Euch jemand so nett und könnte mir sagen was ich falsch mache?
Danke und Gruß
Matthias
- Anmelden oder Registrieren um Kommentare zu schreiben
node
am 09.08.2010 - 07:47 Uhr
Hallo.
Hast Du Dir mal Debug-Ausgaben gemacht um zu schauen, ob da auch die korrekte Node geladen wird?
<?php
print arg(0);
if (arg(0) == 'node' && is_numeric(arg(1)) && !isset(arg(2))) {
$node = node_load(arg(1));
print $node->nid;
print $node->title;
print flag_create_link('bookmarks', $node->nid);
}
?>
Die Verwendung der Nid ist schon richtig (siehe http://api.lullabot.com/flag_create_link).
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hallo Stefan. danke für die
am 09.08.2010 - 13:28 Uhr
Hallo Stefan.
danke für die Rückmeldung.
In PHP-Dingen bin ich leider vollkommen unbewandert.
Ich habe den Code
<?php
print arg(0);
if (arg(0) == 'node' && is_numeric(arg(1)) && !isset(arg(2))) {
$node = node_load(arg(1));
print $node->nid;
print $node->title;
print flag_create_link('bookmarks', $node->nid);
}
?>
trotzdem einfach mal in node.tpl.php/user-profile.tpl.php reingepackt.
Dies gibt mir eine Fehlermeldung aus
Die Fehlermeldung lautet "Fatal error: Can't use function return value in write context in node.tpl.php on line 19"
Zeile 19 ist
if (arg(0) == 'node' && is_numeric(arg(1)) && !isset(arg(2))) {
Ich hab leider überhaupt keinen Plan was das bedeutet bzw. wie ich den Fehler beheben kann.
Ich habe letzte Nacht ein Issue beim Flag-Modul reingestellt und das Problem geschildert - ich bekam dann eine Antwort von quicksketch(Lullabot)- dieser meinte folgendes ....
This restricts it to just node pages, where arg(0) == 'node' and arg(1) is the nid. If you're going to show it on user pages, arg(0) is "user".
Daraus schließe ich, dass der Code folgendermaßern aussehen muss.
<?php
//If in single node page
if ( arg(0) == 'user' && is_numeric(arg(1)) && ! arg(2) ) {
//Load node to get nid
$node = node_load(arg(1));
//Print Flag link
print flag_create_link('bookmarks', $node->nid);
}
?>
Ich habs natürlich so ausprobiert aber leider wird der Block mit den Flag-Links im User-Profile trotzdem nicht angezeigt.
Ich sehe im Moment leider nur große Fragezeichen - falls Du noch einen Tip hast würde ich mich freuen.
Danke und Gruß
Matthias
Drupal rockt!!!
Block
am 09.08.2010 - 13:26 Uhr
...einfach mal in node.tpl.php/user-profile.tpl.php reingepackt.
Der Code ist für den Block gedacht. Genau dort hattest Du doch auch Deinen Code von oben, oder nicht?
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hab ich natürlich auch
am 09.08.2010 - 13:38 Uhr
Hab ich natürlich auch ausprobiert.
Das gibt aber leider auch eine Fehlermeldung - wenn ich den Block mit Code speichern will, komme ich nichtmal mehr auf die "Blöckeseite" zurück! Auch das Profile kann ich nicht mehr aufrufen.
Fehlermeldung:
Fatal error: Can't use function return value in write context in E:\xampp\htdocs\projekt\includes\common.inc(1699) : eval()'d code on line 3
eval()'d code on line 3 ist wieder ...
if (arg(0) == 'node' && is_numeric(arg(1)) && !isset(arg(2))) {
Grübelnde Grüße
Drupal rockt!!!
Hallo Stefan, ich habe bei
am 09.08.2010 - 13:47 Uhr
Hallo Stefan,
ich habe bei dem Code
<?php
print arg(0);
if (arg(0) == 'node' && is_numeric(arg(1)) && !isset(arg(2))) {
$node = node_load(arg(1));
print $node->nid;
print $node->title;
print flag_create_link('bookmarks', $node->nid);
}
?>
mal das
isset
entfernt .....Die Zeile sieht dann so aus
if (arg(0) == 'node' && is_numeric(arg(1)) && ! (arg(2))) {
Nun bekomme ich als Ausgabe das Wort "user" (ohne Anführungszeichen) - das ist aber reiner Text - kein Link - mehr wird leider nicht ausgegeben.
Grübel
Drupal rockt!!!
Rufe ich den Code im
am 09.08.2010 - 13:59 Uhr
Rufe ich den Code im Block
<?php
print arg(0);
if (arg(0) == 'node' && is_numeric(arg(1)) && ! (arg(2))) {
$node = node_load(arg(1));
print $node->nid;
print $node->title;
print flag_create_link('bookmarks', $node->nid);
}
?>
im Contente-Profile-Node auf (content/benny)
wird mir folgendes ausgegeben
Rufe ich aber das richtige Profile auf (users/benny)
gibt es als Ausgabe nur
Drupal rockt!!!
Profil
am 09.08.2010 - 14:16 Uhr
Das sagt uns also, dass
arg(0)
nicht den Wert "node", sondern "user" hat.Dementsprechend musst Du erst noch den Profilnode laden.
<?php
if ($user = menu_get_object()) {
if (isset($user->uid)) {
$type = 'profiltyp';
$node = content_profile_load($type, $user->uid);
print flag_create_link('bookmarks', $node->nid);
}
}
?>
Problematisch ist jedoch, dass es mehrere Inhaltstypen geben kann, die als Profil dienen können. Normalerweise müsstest Du über alle verfügbaren Inhaltstypen iterieren und für die entsprechenden Typen den Bookmark-Link ausgeben.
Ich hab im Beispiel jetzt einfach mal "profiltyp" als Namen für den verwendeten Inhaltstypen angegeben.
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hallo Stefan, nochmals danke
am 09.08.2010 - 14:33 Uhr
Hallo Stefan,
nochmals danke für Deine Mühe.
Leider gibt es mit der Version auch keine Ausgabe des Blocks bzw. des Flag-Links.
Unter content/benny wird der Link angezeigt - unter users/benny leider nicht.
Grübelnde Grüße
Drupal rockt!!!
Was ich mich gerade frage
am 09.08.2010 - 14:45 Uhr
Was ich mich gerade frage ...
Auf der Flag-Settings-Page admin/build/flags/edit/bookmarks kann man ja einstellen auf welchem Content-Type der Link angezeigt werden soll.
Mein Content-Type für Content-Profile heißt "model" und dort wurde natürlich ein Häckchen gemacht. Dort gibt es aber keine Option "Show on User-Profile" ...
Kann es sein, dass das Flag-Module damit nicht klar kommt - der Aufruf der Funktion erfolgt ja über das Profile und nicht über den Node (Content-Type Content-Profile "model")?
Wenn der Node (aktivierte Content-Type) aufgerufen wird, klappt ja alles bestens aber beim Profile scheint Flag die Ausgabe zu "verschlucken" - meiner bescheidenen Meinung nach.
Kann das sein?
Drupal rockt!!!
Lösung
am 09.08.2010 - 18:46 Uhr
Hallo.
Probier mal folgenden Code im Block:
<?php
if (arg(0) == 'user' && is_numeric(arg(1))) {
$account = user_load(arg(1));
if (isset($account->uid)) {
$node = content_profile_load('profile', $account->uid);
print flag_create_link('bookmarks', $node->nid);
}
}
?>
Das funktioniert bei mir (mit dem Inhaltstypen "profile" als Profil-Inhaltstyp).
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hallo Stefan, ich knie zu
am 09.08.2010 - 19:13 Uhr
Hallo Stefan,
ich knie zu Boden und huldige Dir ;-)
Es funktioniert perfekt ....
Einfach super!!!!!!!!
Besten Dank und schöne Grüße
Matthias
Drupal rockt!!!