Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

"Diesen Block nur anzeigen, wenn der folgende PHP-Code TRUE zurückgibt" für Nodes einer bestimmten Kategorie

Eingetragen von hoshi79 (53)
am 06.03.2008 - 18:08 Uhr in
  • Allgemeines zu Drupal

sehr geehrte drupaler,
wie bekomme ich mittels php raus, zu welcher taxonomy-kategorie ein node gehört und welche variabel ist dafür verantwortlich, dass das taxonomy-menü sich nicht schließt, obwohl ich eine node ausgewählt habe?

mit den informationen möchte ich mir für "Diesen Block nur anzeigen, wenn der folgende PHP-Code TRUE zurückgibt" eine abfrage basteln, die einen block nur erscheinen lässt, wenn die node zur richtigen kategorie gehört.

zb:

<?php
//Dann ist der Block nur für nodes sichtbar, die in der Kategorie mit tid=3 sind.
if (arg(0) == 'node' && is_numeric($nid = arg(1))) {
   
$node = node_load($nid);
    return isset(
$node->taxonomy['3']);
}
return
FALSE;
?>

das habe ich im forum schon gefunden, funktioniert bei mir aber nicht!!! außerdem bräuchte ich es für mehrere kategorien... zb 12-18
vielen dank schon einmal
gruß, hoshi

‹ register_globals ohne .htacces Multisite Installation ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Code ist gut

Eingetragen von tumblingmug (872)
am 06.03.2008 - 23:55 Uhr

Der Code sollte sicher funktionieren. Hast Du die öffnenden und schließenden PHP-Tags mit eingefügt? Hast Du "Block nur anzeigen, wenn Code TRUE zurückgibt" aktiviert? Sagst Du "geht nicht" tatsächlich angesichts aufgerufener URL (page!) 'node/27' (gesetzt den Fall, diese ist mit tid 3 getaggt?)

Bei Term-Listings muss der Code des obigen Zitats geringfügig angepasst werden, z.B. für Taxonomy-ID 3:

<?php
if (arg(0) == 'taxonomy' && arg(2)=='3') {
    return
TRUE;
}
return
FALSE;
?>

Wenn das für mehrere Terms gelten soll (z.B. 'taxonomy/term/2+3') dann ginge dies hier:
<?php
if (arg(0) == 'taxonomy' && arg(2)=='2 3') {
    return
TRUE;
}
return
FALSE;
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

danke schon einmal

Eingetragen von hoshi79 (53)
am 07.03.2008 - 10:39 Uhr

zu deinen fragen:
1. Hast Du die öffnenden und schließenden PHP-Tags mit eingefügt?
2. Hast Du "Block nur anzeigen, wenn Code TRUE zurückgibt" aktiviert?

jupp!!!

zur dritten frage:

ich habe im template einfach mal ne runde arg(0) ausgegeben. solange ich mich durch die navigation arbeite steht da immer "category", auch wenn ich die begriffe der kategorien in der navigation anwähle
zb:
/?q=category/15
für einen untergeordneten begriff:
/?q=category/15/2
diese habe ich schön brav mit taxonomy erstellt und gebe sie mit taxonomy_menu aus.
aber sobald ich eine node klicke, welche ich der category "/?q=category/15/2" zugeordnet habe, lautet mein link zb. /?q=node/15.

der block weiß bis jetzt bescheid, er darf sich nur für die kategorien 15,16 und 17 öffen. aber er soll sich auch nur für die dazugehörigen nodes öffnen. sprich: wenn die node zur kategorie 15,16 oder 17 gehört, darf der block sich öffnen. nicht, wenn die node zb. zur kategorie 14 gehört, die einem anderen block zugeteilt ist.

klar, ich könnte jetzt auch so jede einzelne node einpflastern:

... if(arg(0) == 'node' && arg(1)=='x y z') ...

aber davon habe ich leider ein paar zuviel, nämlich über 4000!

und hier ist ja das problem. da kann dein vorschlag ja nicht funktionieren, da es sich beim arg(0) um node handelt. trotzdem bleibt die navigation geöffnet. das müsste ja bedeuteten, die node weiß, zu welcher kategorie sie gehört. und welche variabel ist dafür zuständig?

deshalb bräuchte ich solch eine lösung:

... if(arg(0) == 'node' && NODE__ZUORDUNG_ZU_KATEGORIE__KATEGORIEID == AKTUELLE_KATEGORIE_ID) ...

beide variabeln werden ja mitgeliefert, da sich das menü bei drücken auf eine node nicht schließt. wie gestallte ich also richtig meine abfrage?

danke schon einmal
gruß, hoshi

  • Anmelden oder Registrieren um Kommentare zu schreiben

lösung in sicht

Eingetragen von hoshi79 (53)
am 07.03.2008 - 15:46 Uhr

also, ich stehe kurz vor der lösung, komme bei einer sache nicht ganz weiter. folgendes script habe ich mir für "Diesen Block nur anzeigen, wenn der folgende PHP-Code TRUE zurückgibt" gebastelt:

<?php
//Zu welcher Parentkategorie gehört die Node?
if(arg(0)=='node'){
$node_catid = db_result(db_query("SELECT td.vid FROM term_node AS tn, term_data AS td WHERE tn.nid=$nid AND td.tid=tn.tid"));
}

//Folgende Parentkategorien und Nodes mit Bezug auf Parentkategorien blenden Block ein
if (arg(0) == 'category' && arg(1) > 17 && arg(1) < 30 || arg(0) == 'node' &&  $node_catid > 17 && $node_catid < 30){
return
TRUE;   
}else{
return
FALSE;   
}
?>

Allerdings hat er Probleme, die aktuelle $nid im statement aufzulösen. auch arg(1), welche bei den nodes die id angibt, wird nicht aufgelöst. ich bekomme folgenden fehlermeldung:

user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND td.tid=tn.tid' at line 1 query: SELECT td.vid FROM term_node AS tn, term_data AS td WHERE tn.nid= AND td.tid=tn.tid in /var/www/XXXXX.de/demo4/includes/database.mysql.inc on line 172.

wie bekomme ich die aktuelle nodeid ausgegeben?
danke.

  • Anmelden oder Registrieren um Kommentare zu schreiben

<?php<?php//Zu welcher

Eingetragen von dawehner (2639)
am 07.03.2008 - 16:03 Uhr

<?php
//Zu welcher Parentkategorie gehört die Node?
if(arg(0)=='node' && is_numeric(arg(1)){
$nid = arg(1);
$node_catid = db_result(db_query("SELECT td.vid FROM term_node AS tn, term_data AS td WHERE tn.nid= %d AND td.tid = tn.tid"), $nid);
}

//Folgende Parentkategorien und Nodes mit Bezug auf Parentkategorien blenden Block ein
if (arg(0) == 'category' && arg(1) > 17 && arg(1) < 30 || arg(0) == 'node' &&  $node_catid > 17 && $node_catid < 30){
return
TRUE;  
}else{
return
FALSE;  
}
?>

so müsste es gehen
--------------
Mein Blog: www.freeblogger.org
Deutscher IRC-Channel: irc.freenode.net #drupal.de je mehr desto besser
... Jabber-me: dereine@jabber.ccc.de Warum Jabber?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Blockterm

Eingetragen von md (3717)
am 07.03.2008 - 17:27 Uhr

Installier dir einfach dieses Modul: http://drupal.org/project/blockterm

vg
--
md - DrupalCenter

mdwp* :: Drupal Services

vg
md - DrupalCenter.de

mdwp* Drupal Consulting & Services

  • Anmelden oder Registrieren um Kommentare zu schreiben

meine lösung

Eingetragen von hoshi79 (53)
am 07.03.2008 - 17:49 Uhr

eine klammer falsch gesetzt, und es ging nicht!!!
hier nun endlich meine lösung, und sie funktioniert:

<?php
//Zu welcher Taxonomie-Kategorie gehört die Node?
if(arg(0)=='node' && is_numeric(arg(1))){
$node_catid = db_result(db_query("SELECT td.vid FROM term_node AS tn, term_data AS td WHERE tn.nid= %d AND td.tid = tn.tid", arg(1)));
}

//Folgende Taxonomie-Kategorien und Nodes mit Bezug auf Taxonomie-Kategorie blenden den Block ein
if (arg(0) == 'category' && arg(1) > 17 && arg(1) < 30 || arg(0) == 'node' &&  $node_catid > 17 && $node_catid < 30){
return
TRUE; 
}else{
return
FALSE; 
}
?>

gruß und vielen dank für die hilfe
hoshi

  • Anmelden oder Registrieren um Kommentare zu schreiben

Flexibler

Eingetragen von md (3717)
am 07.03.2008 - 17:55 Uhr

Mit dem Blockterm Modul wäre das flexibler zu handhaben, da du die Term ids flexibel auswählen kannst.
Fest verdrahtete Werte werden häufig, irgendwann zum Problem.

vg
--
md - DrupalCenter

mdwp* :: Drupal Services

vg
md - DrupalCenter.de

mdwp* Drupal Consulting & Services

  • Anmelden oder Registrieren um Kommentare zu schreiben

Blockterm sieht gut aus,

Eingetragen von tumblingmug (872)
am 07.03.2008 - 17:56 Uhr

Blockterm sieht gut aus, allerding bevor ich mir den Aufwand von Installation, Konfiguration und künftiger unaufhörlicher Updatearbeit antue, nur noch einmal der Hinweis, dass der von hoshi79 gepostete Code im Eingangsbeitrag sicher funktioniert. @hoshi79 - das, was Du hier willst, hast du schon gepostet:

hoshi79 schrieb

deshalb bräuchte ich solch eine lösung:

... if(arg(0) == 'node' && NODE__ZUORDUNG_ZU_KATEGORIE__KATEGORIEID == AKTUELLE_KATEGORIE_ID) ...

Mein Vorschlag bezog sich auf Deinen Wunsch, dies auch auf Teaserlisten anzuwenden und verstand sich daher nur als Erweiterung des bereits geposteten Codes. Wenn dieser nicht funktioniert, liegt es m. E. nicht am Code. (Deswegen auch meine Nachfragen.) Man müsste halt debuggen, in einem auf PHP gestellten Testnode den Code einfügen, nach der noad_load()-Zeile eben einmal ein <?php print_r($node->taxonomy) ?> einbauen etc.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Da hast du sicher

Eingetragen von md (3717)
am 07.03.2008 - 18:04 Uhr

Da hast du sicher teilweise recht. Allerdings denke ich, dass man mit fest verdrahteten Werten nur auf einer eigenen Site arbeiten kann.

Bei Kundenprojekten sollten die Mitarbeiter in der Lage sein, soviel wie möglich über Drupal ändern zu können und nicht etwas im Block-Code. Und dann noch mit PHP!
Da ist die Katastrophe doch schneller da, als man glaubt.

vg
--
md - DrupalCenter

mdwp* :: Drupal Services

vg
md - DrupalCenter.de

mdwp* Drupal Consulting & Services

  • Anmelden oder Registrieren um Kommentare zu schreiben

tada

Eingetragen von hoshi79 (53)
am 07.03.2008 - 19:08 Uhr

puh, ich bin überhaupt froh, dass ich es geschafft habe. aber das madul werde ich auch noch installieren. mal schauen, was besser ist. danke für eure mühen.
hoshi

  • Anmelden oder Registrieren um Kommentare zu schreiben

@md

Eingetragen von tumblingmug (872)
am 08.03.2008 - 21:04 Uhr

@md:
Da gebe ich Dir bestimmt recht.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • eMail-Adresse überprüfen ob diese auch tatsächlich existiert
  • [gelöst]Welche Tokens werden bei Images im Feld Dateiverzeichnis erlaubt
  • Modulupdate per Webinterace scheitert an authorize.php und access denied für Admin-User
  • Fehlermeldung nach Update auf PHP 7.4 - array offset on value of type null in geocoder_widget...
  • BEF Exposed Filter collapse funktioniert nicht mit Bootstrap Theme
  • content und media-files von drupal8 nach drupal9 migrieren
  • Notificationsnicht immer und gesammelt bei Update
  • Meldung zu Token im Statusbericht
  • Fehlermeldung: Deprecated function
  • Warning: call_user_func() expects parameter 1 to be a valid callback, class 'Drupal\node\Entity\Node' does not have a method 'ge
  • Versenden von Anfragen per Webform
  • Goodbye Online Drupal Meetup Germany - Hello Drupal DACH Online Meetup!
Weiter

Neue Kommentare

  • Moin Moin vielen lieben Dank
    vor 1 Stunde 46 Minuten
  • Auch,wenn es noch über
    vor 6 Stunden 30 Minuten
  • Das steht über dem Bereich,
    vor 6 Stunden 33 Minuten
  • Hallo Jenna, ich habe das
    vor 1 Tag 3 Stunden
  • Ich hatte gehofft, bis auf
    vor 1 Tag 3 Stunden
  • Wenn der Provider keine freie
    vor 1 Tag 3 Stunden
  • Problemeingrenzung
    vor 1 Tag 4 Stunden
  • Ich habe es bei einigen
    vor 2 Tagen 6 Stunden
  • Self-referencing
    vor 3 Tagen 21 Stunden
  • settings.php
    vor 3 Tagen 21 Stunden

Statistik

Beiträge im Forum: 245988
Registrierte User: 18832

Neue User:

  • finnster
  • Damian1802
  • MrWebMV

» Alle User anzeigen

User nach Punkten sortiert:
wla9012
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3916
ronald3829
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 4 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association