Ein Menü (als Block) auch dann sichtbar machen, wenn keine Links zugeordnet sind
Eingetragen von braun (40)
am 14.09.2009 - 18:14 Uhr in
am 14.09.2009 - 18:14 Uhr in
Wo finde ich den Source, wo er die Menüs als Block erstellt?.
Ich erzeuge ein Menü, was ein Block ist und die Blöcke werden aber erst angezeigt, wenn min. 1 Links dort einsortiert wurde.
Ich möchte aber gerne bei count == 0 einen Text anzeigen
- Anmelden oder Registrieren um Kommentare zu schreiben
Erstelle doch einfach einen
am 14.09.2009 - 23:27 Uhr
Erstelle doch einfach einen Text-Block.
Dort kannst Du Deinen Text reinschreiben. Wenn Dein Menu irgendwie dynamisch erzeugt wird (und später Einträge hinzukommen), könntest Du diesen Block wieder deaktivieren oder über PHP-Code ausblenden, wenn das Menü angezeigt wird.
Tobias
Block themen
am 15.09.2009 - 02:00 Uhr
Oder du schreibst ein Theme für diesen Block. Mit php schaust du dir an, was drin steht. Entweder gibst du dann das Menü aus oder einen Alternativtext.
--
textformer mediendesign | Webkrauts
Danke fuer die ansaetze. Ich
am 15.09.2009 - 06:35 Uhr
Danke fuer die ansaetze. Ich moechte jedoch die methode ueberschreiben. Wo finde ich die methode?
theme_menu_tree
am 15.09.2009 - 09:59 Uhr
Der Block wird offensichtlich durch
menu_block
erzeugt. Wenn du dich durch den Quelltext durchklickst, dann landest du irgendwann bei der Funktionmenu_tree_output
, die danntheme('menu_tree', $output)
aufruft. Am nächsten reicht alsotheme_menu_tree
heran.Allerdings weiß ich nicht ob
theme_menu_tree
wirklich nur für Blöcke aufgerufen wird. Ich schließe mich deshalb dem Ratschlag von Nicolei an: schreibe ein Template für den Block.--
Mit dem Theme für den Block
am 15.09.2009 - 10:32 Uhr
Mit dem Theme für den Block steh ich gerade auf dem Schlauch weil die Ausgabe erfolgt doch nur mittels node->content.
Was meint ihr genau, sollte ich tun?
Re: Mit dem Theme für den Block
am 15.09.2009 - 11:07 Uhr
block-[irgendwas].tpl.php
.block.tpl.php
vorhanden ist, dann kopiere eine dort hin. Falls dein Theme auf ein Basis-Theme aufbaut, dann kopiere dieblock.tpl.php
des Basis-Themes, ansonsten kopieremodules/system/block.tpl.php
.block.tpl.php
deines Themes in eine Datei mit dem Namen, den du durch den Theme-Developer herausgefunden hast.--
traxer schrieb Packe einen
am 15.09.2009 - 11:07 Uhr
block-[irgendwas].tpl.php
.block.tpl.php
vorhanden ist, dann kopiere eine dort hin. Falls dein Theme auf ein Basis-Theme aufbaut, dann nimm dieblock.tpl.php
des Basis-Themes, ansonstenmodules/system/block.tpl.php
.block.tpl.php
deines Themes in eine Datei mit dem Namen, den du durch den Theme-Developer herausgefunden hast.Danke für deine Mühe. Das meine ich aber nicht. Klar ich muss einen neuen Block machen. Mir geht es aber um das Innere. Hier wird halt der Block-Content durch $block->content gebildet. Und genau dies muss ich eben ersetzen. Deshalb hatte ich nach den Methoden gefragt, die da aufgerufen werden :)
Methoden?
am 15.09.2009 - 12:27 Uhr
Sind die Methoden nicht egal? Ich gehe da immer recht simpel vor. Abfragen, ob im Content ein
<li>
steht. Wenn ja, ist es eine Liste, dann den Content ausgeben. Wenn nein, eben den alternativen Text statt des Content ausgeben.Ich weiß nicht, ob
<li>
ausreicht, um es zu prüfen. Kommt eben darauf an, was der Block an sich ausgibt. Vielleicht reicht es prüfen, ob der Content leer ist oder nicht.--
textformer mediendesign | Webkrauts
Nicolai Schwarz
am 15.09.2009 - 14:45 Uhr
Sind die Methoden nicht egal? Ich gehe da immer recht simpel vor. Abfragen, ob im Content ein
<li>
steht. Wenn ja, ist es eine Liste, dann den Content ausgeben. Wenn nein, eben den alternativen Text statt des Content ausgeben.Ich weiß nicht, ob
<li>
ausreicht, um es zu prüfen. Kommt eben darauf an, was der Block an sich ausgibt. Vielleicht reicht es prüfen, ob der Content leer ist oder nicht.--
textformer mediendesign | Webkrauts
Ich stimme dir zu, warum lange Wege gehen. Aber ich bin dann nicht mehr serverseitig, sondern eben clientseitig unterwegs, was ich so gut es geht, immer vermeiden möchte. du meinst ich soll so etwas in etwa machen:
http://www.drupalcenter.de/node/21398
P.S.
am 15.09.2009 - 14:53 Uhr
Nervig ist auch, dass Drupal die Links ständig alphabetisch sortiert. Man kann es zwar nachträglich verschieben, nur der Sinn von CMS ist die Automation. So wie es jetzt ist, muss ich nach Anlegen eines Produktes noch viel Handarbeit machen. Gefällt mir noch nicht so ganz. Aber es gibt auch viel schlimmeres auf der Welt.
Nix clientseitig
am 15.09.2009 - 15:00 Uhr
Nö. Bzw: Vielleicht reden wir aneinander vorbei? Ich meine, du änderst den Block per php bei der Ausgabe. Das passiert rein auf dem Server. Ich rede nicht davon, den Block per JavaScript zu analysieren. Das ginge natürlich auch, ist aber Blödsinn (weil es beim Client läuft, weil dort JS evlt. abgeschaltet ist).
--
textformer mediendesign | Webkrauts
Nicolai Schwarz
am 15.09.2009 - 15:09 Uhr
Nö. Bzw: Vielleicht reden wir aneinander vorbei? Ich meine, du änderst den Block per php bei der Ausgabe. Das passiert rein auf dem Server. Ich rede nicht davon, den Block per JavaScript zu analysieren. Das ginge natürlich auch, ist aber Blödsinn (weil es beim Client läuft, weil dort JS evlt. abgeschaltet ist).
--
textformer mediendesign | Webkrauts
Ich denke auch wir reden aneinander vorbei. Du hast geschrieben zum Beispiel den Tag li abzufragen. Nur mittels php (serverseitig) kann man keine Ausgabe nach li durchsuchen, weil Sie noch nicht beim Client ist. Wenn es jetzt eine Methode wie $block-Content gibt, kann man natürlich die Rückgabe (also die String-Literale) durchsuchen. Aber wieso so umständlich. Drupal muss doch irgendwo eine Methode haben, wo es die Links aus der DB holt, nach Alphabet sortiert und dann mittels Tags und print ausgibt. Und genau diese suche ich, damit ich Sie überschreiben kann.
Sicher doch
am 15.09.2009 - 15:28 Uhr
Natürlich kannst du mit php prüfen, ob ein li ausgegeben wird. Einfach den Content im Block auf den String prüfen.
if(strpos($string,"String")!==false) echo "String ist enthalten";
Dauert nur ein paar Millisekunden, und ist zumindest für mich sehr viel einfacher als die entsprechende Drupal-Methode zu suchen und zu überschreiben. Du brauchst es doch nur an der einen Stelle, oder?
Wenn du es unbedingt per Funktion überschreiben willst, geht es vermutlich hiermit: http://api.drupal.org/api/function/theme_blocks
--
textformer mediendesign | Webkrauts
Nicolai Schwarz
am 15.09.2009 - 16:07 Uhr
Natürlich kannst du mit php prüfen, ob ein li ausgegeben wird. Einfach den Content im Block auf den String prüfen.
if(strpos($string,"String")!==false) echo "String ist enthalten";
Dauert nur ein paar Millisekunden, und ist zumindest für mich sehr viel einfacher als die entsprechende Drupal-Methode zu suchen und zu überschreiben. Du brauchst es doch nur an der einen Stelle, oder?
Wenn du es unbedingt per Funktion überschreiben willst, geht es vermutlich hiermit: http://api.drupal.org/api/function/theme_blocks
--
textformer mediendesign | Webkrauts
Ah, ok die Funktion hatte ich nicht auf dem Schirm. Kalr, hast Recht, dass ist deutlich einfacher.
block.tpl.php überschreiben funktioniert nicht
am 15.09.2009 - 16:33 Uhr
Das mit dem eigenen Block-Template wird nicht funktionieren. Die Funktion
block_list
, die vontheme_blocks
aufgerufen wird, überspringt bereits leere Blöcke, so daßtheme('block', $block)
auf leeren Blöcken überhaupt nicht ausgeführt wird.Es bleiben wohl wirklich nur die Möglichkeiten,
theme_blocks
unter Umgehung vonblock_list
zu überschreiben, odertheme_menu_tree
zu überschreiben.Sorry für die Unannehmlichkeiten.
--
traxer schrieb Das mit dem
am 15.09.2009 - 16:41 Uhr
Das mit dem eigenen Block-Template wird nicht funktionieren. Die Funktion
block_list
, die vontheme_blocks
aufgerufen wird, überspringt bereits leere Blöcke, so daßtheme('block', $block)
auf leeren Blöcken überhaupt nicht ausgeführt wird.Es bleiben wohl wirklich nur die Möglichkeiten,
theme_blocks
unter Umgehung vonblock_list
zu überschreiben, odertheme_menu_tree
zu überschreiben.Sorry für die Unannehmlichkeiten.
--
Kein Problem. Habe ich auch eben festgestellt, dass Block-Content nix lieferte. Ich zweifelte schon :)
Whoops
am 15.09.2009 - 17:04 Uhr
Das mit dem eigenen Block-Template wird nicht funktionieren. Die Funktion block_list, die von theme_blocks aufgerufen wird, überspringt bereits leere Blöcke, so daß theme('block', $block) auf leeren Blöcken überhaupt nicht ausgeführt wird.
Whoops. Dann sorry für die falsche Fährte.
--
textformer mediendesign | Webkrauts