Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#1 2010-05-05 14:10:38

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,477

[de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

Wie die Ereignisse doch manchmal stimmig zusammentreffen können! Vor wenigen Tagen schrieb jakob das übersetzte Beispiel einer Navigation mit Sektionen, danach gab’s den Beitrag Arbeitseinteilung Webmaster / Kunde.

Ich hatte erwähnt, den Kunden bei Bedarf neue Sektionen anzulegen und das entsprechende Menü damit zu ergänzen. Genau so eine Bitte wollte ich gestern umsetzen. Der Kunde meinte, es gäbe zwar noch keine Texte für die zwei neuen Sektionen, er wäre aber froh, wenn diese Sektionen schon existieren würden. Ich brauchte also ein Lösung, bei der in der Navigationsliste die Sektionen, denen vorübergehend noch keine Artikel zugewiesen sind, im TxP-Code zwar aufgelistet sind, aber in der Navigation erst dann angezeigt werden, wenn es mindestens einen zugeordneten Artikel geben wird.

Eigentlich dachte ich, das wäre eine einfach umzusetzende Aufgabe. Und doch, die erhoffte, einfache Lösung fiel mir im Zusammenhang mit dem schon vorhandenen Code nicht ein. Ich dachte, eine reduzierte Version vom oben erwähnten, von jakob übersetzten Beispiel einer Navigation mit Sektionen könnte das Gewünschte erledigen.

Mein ursprünglicher Code sah so aus:

<ul id="nav-intern">
	<li<txp:if_section name="default"> class="aktuell">Startseite<txp:else />><a href="/" accesskey="0">Startseite</a></txp:if_section></li>
	<li<txp:if_section name="sektion1,sektion2,usw"> class="aktuell">Über uns
		<ul>
			<txp:section_list sections="sektion1,sektion2,usw" wraptag="" break="" class="" form="nav-intern-subsektionen" />
		</ul>
	<txp:else />><a href="/sektion1">Über uns</a></txp:if_section></li>
	<li<txp:if_section name="kontakt"> class="aktuell">Kontakt<txp:else />><a href="/kontakt" accesskey="3">Kontakt</a></txp:if_section></li>
</ul>

(Es gibt darin noch ein unbefriedigendes Detail, welches im Moment nicht Priorität hat, die zwei Mal aufgeführte, komma-getrennte Sektionsliste.)

Mir geht es hier um das, was im Baustein “nav-intern-subsektionen” passieren soll.

Dieser sah bis zu meinen Änderungsversuchen so aus:

<li<txp:if_section name='<txp:section />'> class="aktuell"><txp:section title="1" /><txp:else />><a href='/<txp:section />'><txp:section title="1" /></a></txp:if_section></li>

Anders als im von jakob übersetzten Beispiel einer Navigation mit Sektionen wollte ich <txp:section_list> als einfachen Tag mit Baustein benutzen, nicht als Container. Also veränderte ich den Baustein so:

Nachtrag 5. Mai 2010: Der folgende Code kann so nicht funktionieren, ist also nicht lesenswert! Siehe den neuen Ansatz im nächsten Beitrag.

Nachtrag 7. Mai 2010: Nach mehrfachen Verwirrungen wurde ich auf die Lösung des Problems geschupst.

<txp:variable name="mit-artikel" value='<txp:article_custom section=''<txp:section />'' />' />
<txp:if_variable name="mit-artikel" value="">
	<txp:hide>Es passiert nichts</txp:hide>
<txp:else />
	<li<txp:if_section name='<txp:section />'> class="aktuell"><txp:section title="1" /><txp:else />><a href='/<txp:section />'><txp:section title="1" /></a></txp:if_section></li>
</txp:if_variable>

Da muss aber ein Denkfehler vorliegen, weil Sektionen ohne zugeordnete Artikel werden in der Liste trotzdem gezeigt. Ich versuchte mehrere Variationen, ebenso <txp:section_list> als Containertag zu verwenden, fand aber bis jetzt keine Lösung. Die Variable gibt gar nichts aus, das in einer If-else-Abfrage verwendet werden könnte.

Ob ich zu weit suche, oder falsch überlege? Ich komme mir etwas stupid vor, weil ich denke, das müsste doch einfach lösbar sein. Übersehe ich etwas?

Ich stelle das hier zur Diskussion, sicher kennt jemand von euch die Lösung für ein solch alltägliches Problem.

Last edited by GugUser (2010-05-07 15:46:36)

Offline

#2 2010-05-05 22:16:46

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,477

Re: [de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

Es muss ein neuer Denkansatz her.

Noch einmal der oben gezeigte, ursprüngliche Code der Navigationsliste:

<ul id="nav-intern">
	<li<txp:if_section name="default"> class="aktuell">Startseite<txp:else />><a href="/" accesskey="0">Startseite</a></txp:if_section></li>
	<li<txp:if_section name="sektion1,sektion2,usw"> class="aktuell">Über uns
		<ul>
			<txp:section_list sections="sektion1,sektion2,usw" wraptag="" break="" class="" form="nav-intern-subsektionen" />
		</ul>
	<txp:else />><a href="/sektion1">Über uns</a></txp:if_section></li>
	<li<txp:if_section name="kontakt"> class="aktuell">Kontakt<txp:else />><a href="/kontakt" accesskey="3">Kontakt</a></txp:if_section></li>
</ul>

Neu der veränderte Code derselben Navigationsliste:

<ul id="nav-intern">
	<li<txp:if_section name="default"> class="aktuell">Startseite<txp:else />><a href="/" accesskey="0">Startseite</a></txp:if_section></li>
	**<txp:variable name="sektionen" value="sektion1,sektion2,usw" />
	<li<txp:if_section name='<txp:variable name="sektionen" />'> class="aktuell">Über uns
		<ul>
			<txp:section_list sections='<txp:variable name="sektionen" />' wraptag="" break="" class="" form="nav-intern-subsektionen" />
		</ul>
	<txp:else />><a href="/sektion1">Über uns</a></txp:if_section></li>
	<li<txp:if_section name="kontakt"> class="aktuell">Kontakt<txp:else />><a href="/kontakt" accesskey="3">Kontakt</a></txp:if_section></li>
</ul>

In der Variable (Zeile mit **) kann ich von Hand eintragen (als komma-getrennte Serie), welche Sektionen in der Navigation vorkommen sollen. Noch habe ich zwar die gestellte Aufgabe nicht gelöst, aber in dieser Sektions-Aufzählung müsste die Lösungsstrategie ansetzen.

Jede der aufgeführten Sektionen (sektion1,sektion2,usw) müsste einzeln überprüft werden, ob es ihr zugeteilte Artikel gibt. Falls nicht, sollte die Sektion aus der Auflistung entfernt werden. Das heisst, der Wert der Variable dürfte erst nach diesem Durchlauf in <txp:if_section> und <txp:section_list /> zur Verfügung stehen.

Noch ist mir nicht klar, wie dies stattfinden soll … Oder suche ich in der falschen Richtung?

;-)

Offline

#3 2010-05-05 22:51:50

jakob
Admin
From: Germany
Registered: 2005-01-20
Posts: 4,940
Website GitHub

Re: [de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

Hmm, ja. Ich habe versucht dein Code nachzuvollziehen (im Kopf) und sehe noch kein offensichtliche Problem. Es ist nicht ganz einfach zu lesen wegen deine lange if_section…else aber sie schauen okay aus.

Außer das ganze in der Tag-Trace anzuschauen, was nicht immer aufschlussreich ist, gehe ich hier meistens auf erste Prinzipien zurück, nehme erst einmal alles was nicht problematisch ist raus und gebe die Variabeln und Section als Text aus, damit ich sehen kann was in welche Fällen ausgegeben wird, probiere dann mit ein Testartikel (erst live dann hidden) usw. Meistens finde ich mein Denkfehler dann.

Unabhängig davon, wenn Du limit=“1” verwendest, reduzierst Du die Länge der Datenbankabfrage. Noch eine lose Frage: deinen Artikel sind nicht zufällig sticky-artikeln? Wenn ja, musst Du ggf. status="sticky" in dein article_custom einbauen…


TXP Builders – finely-crafted code, design and txp

Offline

#4 2010-05-06 18:56:42

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,477

Re: [de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

Danke jakob fürs Mitdenken und die Tipps mit “limit” und “status”. Die in Frage kommenden Artikel haben tatsächlich den Status “sticky”. Ich versuchte all deine Überlegungen, die zum Teil schon vorher auch meine waren, in der Praxis auszuprobieren. Keine der versuchten Varianten funktioniert. Je nach Versuch gibt es zwei mögliche Ergebnisse: Die Navigation wird als komplette Liste angezeigt, also auch mit den Sektionen, denen kein Artikel zugeordnet ist, oder ul bleibt leer.

Ich kann die Grundidee aus Els Artikel auf meine Bedürfnisse abgewandelt so nicht anwenden und auch nicht nachvollziehen, was da eigentlich passieren soll. Überprüfe ich einzelne, aufs Wesentliche reduzierte Teile, z. B. <txp:article_custom section="kontakt" status="sticky" limit="1" />, dann wird gar nichts ausgegeben (es gibt ja z. B. kein “form”), obwohl die Sektion “kontakt” einen Artikel hat. Wie soll denn dieser Code-Teil der Variable einen Wert übergeben können? Das kann ich nicht nachvollziehen.

Trotz allem versuchte ich meinen Navigationsblock den scheinbaren Erkenntnissen entsprechend umzuschreiben. Dies war die Version meines letzten Versuches, und mir scheint, falls ich mich nicht ganz dumm irre, dass dies dem Grundgdanken in Els Artikel entspricht:

<ul id="nav-intern">
	<li<txp:if_section name="default"> class="aktuell">Startseite<txp:else />><a href="/" accesskey="0">Startseite</a></txp:if_section></li>
	<txp:variable name="sektionen" value="sektion1,bis,sektion6,hier,festlegen" />
	<li<txp:if_section name='<txp:variable name="sektionen" />'> class="aktuell">Über uns
		<txp:section_list sections='<txp:variable name="sektionen" />' wraptag="ul" class="" break="">
			<txp:variable name="hat-artikel" value='<txp:article_custom section=''<txp:section />'' status="sticky" limit="1" />' />
			<txp:if_variable name="hat-artikel" value=""><txp:else />
				<txp:article_custom section='<txp:section />' status="sticky" limit="1">
					<li<txp:if_section name='<txp:section />'> class="aktuell"><txp:section title="1" /><txp:else />><a href='/<txp:section />'><txp:section title="1" /></a></txp:if_section></li>
				</txp:article_custom>
			</txp:if_variable>
		</txp:section_list>
	<txp:else />><a href="/sektion1">Über uns</a></txp:if_section></li>
	<li<txp:if_section name="kontakt"> class="aktuell">Kontakt<txp:else />><a href="/kontakt" accesskey="3">Kontakt</a></txp:if_section></li>
</ul>

Ich zeige absichtlich den ganzen Navigationsblock, damit ersichtlich ist, warum ich für die Links oder Nicht-Links dieses Konstrukt wähle.

Es wäre wohl wesentlich einfacher, die Sektionen, welche in der Navigation gezeigt werden sollen, dann einzutragen, wenn es den ersten Artikel gibt. Ich wollte, unabhängig vom anfangs erwähnten Kundenwunsch, eine Lösung entwickeln, welche in solchen Fällen automatisch funktioniert. Von den gegenwärtig sechs Sektionen kann es bei zwei vorkommen, dass es einen Artikel gibt, dieser aber auch wieder entfernt wird.

Last edited by GugUser (2010-05-06 18:58:16)

Offline

#5 2010-05-06 20:50:14

jakob
Admin
From: Germany
Registered: 2005-01-20
Posts: 4,940
Website GitHub

Re: [de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

Ich habe ein wenig experimentiert auf ein Test-Installation und es scheint zu funktionieren wenn Du die innere article_custom weglässt:

<ul id="nav-intern">
	<li<txp:if_section name="default"> class="aktuell">Startseite<txp:else />><a href="/" accesskey="0">Startseite</a></txp:if_section></li>
	<txp:variable name="sektionen" value="sektion1,bis,sektion6,hier,festlegen" />
	<li<txp:if_section name='<txp:variable name="sektionen" />'> class="aktuell">Über uns
		<txp:section_list sections='<txp:variable name="sektionen" />' wraptag="ul" class="" break="">
			<txp:variable name="hat-artikel" value='<txp:article_custom section=''<txp:section />'' status="sticky" limit="1" />' />
			<txp:if_variable name="hat-artikel" value=""><txp:else />
					<li<txp:if_section name='<txp:section />'> class="aktuell"><txp:section title="1" /><txp:else />><a href='/<txp:section />'><txp:section title="1" /></a></txp:if_section></li>
			</txp:if_variable>
		</txp:section_list>
	<txp:else />><a href="/sektion1">Über uns</a></txp:if_section></li>
	<li<txp:if_section name="kontakt"> class="aktuell">Kontakt<txp:else />><a href="/kontakt" accesskey="3">Kontakt</a></txp:if_section></li>
</ul>

Die Über uns Subnavigationspunkte erscheinen nur wenn Du auf eine diese Sektionen gerade befindest.

Mein Test-Setup ist ein wenig anders (nicht sticky artikel) aber ich habe mehrere Sektionen in dein Variable “sektionen” eingetragen. Ein Sektion hat 1 Artikel, ein 0 Artikel. Die Sektionen ohne Artikel erscheint in der Navigation nicht. Wenn ich die Artikel neu dem bisher leere Sektion zuweise, erscheint dies dann und der andere (der nun keine Artikel hat) verschwindet.


TXP Builders – finely-crafted code, design and txp

Offline

#6 2010-05-06 21:10:43

lythande
Member
Registered: 2009-09-08
Posts: 202
Website

Re: [de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

Hallo GugUser,

Genau diese Überlegungen oder den Wunsch, sowas ähnliches wie du jetzt schilderst, habe ich mich auch schon gefragt, aber nicht ernsthaft nach einer Lösung gesucht, weil ich dieses Problem durch das Deaktivieren der Sektionen per Hand in meinem Code gelöst habe. Aber wünschenswert ist es in der Tat, wenn dies automatisch aktiviert/deaktiviert werden könnte! :-)

Bei mir erscheinen die Sektionen zwar, aber sind deaktiviert (also ohne Link, nur als Text sichtbar).

Ich hatte auch schon überlegt, ob dies mit dem smd_if-Plugin gelöst werden könnte, aber Jakob hat hier schon eine gute Lösung geboten, die ich gern in der nächsten Zeit austesten werde!

Aber mich irritiert, dass dann die Sektion, bei der kein Artikel vorhanden ist, dann komplett weggeblendet wird. Ist es denn auch möglich, die Sektion, welche keine Artikel enthält, nur als Text anzubieten?

Offline

#7 2010-05-06 22:04:16

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,477

Re: [de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

Um auf jakobs Antwort zu reagieren, brauche ich noch Ausprobier-Zeit.

lythande schrieb:

Aber mich irritiert, dass dann die Sektion, bei der kein Artikel vorhanden ist, dann komplett weggeblendet wird. Ist es denn auch möglich, die Sektion, welche keine Artikel enthält, nur als Text anzubieten?

In der von mir benutzten und gezeigten Navigation ist die Sektion, welche gerade gezeigt wird, kein Link und wird auch anders dargestellt. Ich finde es aber nicht sinnvoll, dasselbe mit Sektionen zu machen, denen kein Artikel zugeordnet ist. Zumindest in meinem Fall würde das keinen Sinn ergeben. Eine der Sektionen heisst “Ausstellungen”. Dort sollten die Daten von Ausstellungen aufgeführt werden. Es gibt während des Jahres aber auch Monate, wo dort nichts stehen wird, weil nichts anstehend und nichts geplant ist. Somit wäre es verwirrend, den Navigationstext für etwas hinzustellen, das gar nicht existiert.

Sicher gibt es diesbezüglich kein allgemein gültiges Vorgehen.

Offline

#8 2010-05-06 22:31:28

jakob
Admin
From: Germany
Registered: 2005-01-20
Posts: 4,940
Website GitHub

Re: [de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

Eine nachträgliche Gedanke: wenn deine Artikeln zu den Austellungen ein Veröffentlichungsdatum in der Zukunft haben, musst Du ggf. time="any" als Attribut in dein txp:variable mit article_custom einbauen. Übrigens, wenn kein form="..." Attribut angegeben wird, verwendet article_custom der mit der Name “default”.


TXP Builders – finely-crafted code, design and txp

Offline

#9 2010-05-07 02:26:31

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,477

Re: [de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

jakob schrieb:

Eine nachträgliche Gedanke: wenn deine Artikeln zu den Austellungen ein Veröffentlichungsdatum in der Zukunft haben, musst Du ggf. time="any" als Attribut in dein txp:variable mit article_custom einbauen.

Nein, im Moment gibt’s nichts dergleichen.

Übrigens, wenn kein form="..." Attribut angegeben wird, verwendet article_custom der mit der Name “default”.

Ja, das meine ich auch, nur wird eben, wie ich weiter oben angab, gar nichts ausgegeben. Aber halt – uy, jetzt könnte ich eventuell auf die Lösung stossen – da ich meine eigenen Bausteine angelegt habe, löschte ich alles in default, da ich dieses ja nicht benötige.

Es ist schon spät, morgen werde ich der Sache nachgehen, sobald ich Zeit dazu habe.

Offline

#10 2010-05-07 05:35:54

lythande
Member
Registered: 2009-09-08
Posts: 202
Website

Re: [de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

GugUser schrieb:

Sicher gibt es diesbezüglich kein allgemein gültiges Vorgehen.

ich vermute es auch, dass es kein allgemein gültiges Vorgehen gibt. Doch mal angenommen: ab und zu gibt es Ausstellungen, die es geben wird (= Artikel). Ab und zu gibt es die Ausstellungen nicht (= kein Artikel = keine Sektion Ausstellungen). Ich als Besucher der Website weiß das nicht zwingend, dass es eine Sektion Ausstellung gibt, die verschwindet, wenn es derzeit keine Ausstellungen gibt oder ansteht.

Situation 1: es gibt die Sektion Ausstellungen mit einer Ankündigung und Information zu einer Ausstellung: Die Sektion ist da und ich als Besucherin kann anklicken und mich informieren.

Situation 2: etwa 5 Wochen später möchte ich mich erneut informieren über Ausstellungen des Künstlers (nehm ich mal an, dass es ein Künstler ist, ich informiere mich manchmal auch über die gleiche Ausstellung nochmal, um nachzuschauen, bis wann die Ausstellung noch geben wird). Aber ich finde die Sektion überhaupt nicht, weil keine Ausstellung = kein Artikel = keine Sektion. Das würde mich sehr sehr irritieren, denn dann fehlt mir a) die Information, bis wann die eine Ausstellung ging, von der ich Kenntniss erhielt und b) ich weiß immer noch nicht, ob es nun Ausstellungen geben wird oder nicht und wenn die Sektion komplett verschwindet, würde ich meinen, derjenige stellt gar nicht mehr aus.
Da ist es besser, wenn ich zwar auch immer noch auf die Sektion Ausstellungen klicken kann und dann die Information lese, dass es derzeit keine Ausstellung läuft. Denn das ist auch eine Information, die nötig ist, um zu wissen, was gerade los ist.

Situation 3: Zeit ist wie in situation 2, vielleicht einen oder zwei Tage später: ich errinnere mich, dass es mal eine Ausstellung gab und möchte nachschauen, zu welchem Thema sie war. Da es aber dann die Sektion Ausstellungen nicht gibt, kann ich nicht nachschauen. Es sei denn, es gibt ein Archiv-Sektion, wo dann die Artikel von Sektion Ausstellungen “hinwandern”.

Zudem sind bei mir Sektionen, die gerade aktiv sind, mit einer eigenen Class versehen und sehen deshalb immer noch anders aus, auch wenn sie keinen Link mehr enthalten. Neben der Sektion, die aktiv ist (=kein Link), kann also durchaus eine Sektion bestehen, die deaktiviert ist (= kein Link und keine aktiv-class = andere Darstellung möglich).

@Jakob: das mit der form=”“ im article_custom habe ich auch schon festgestellt (wenn auch im anderen Zusammenhang. Ich habe nach der “li” gesucht, da es eine “ul” gibt), aber man kann ja nicht wissen, was im default steht ;-)

Nachtrag: den “li” habe ich auch schon gefunden ;-)

Nachtrag 2: und es kann nicht sein, dass ich halb sechs hier herumgeschrieben habe: es ist halb acht! = so: Zeitzone im Benutzerprofil geändert ;-)

Last edited by lythande (2010-05-07 05:42:13)

Offline

#11 2010-05-07 07:37:51

jakob
Admin
From: Germany
Registered: 2005-01-20
Posts: 4,940
Website GitHub

Re: [de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

Gute Vorschläge lythande.

Hier habe ich es wie Du beschreibst in Situation 3 mit Past events extra aufgelistet. Das geht im Grunde ganz einfach. In dem Fall habe ich ein urlvar &archive=1 als “Schalter” (sauber als /archive/ dargestellt mit einem htaccess Eintrag).

Je nach dem ob der urlvar “archive” vorhanden ist (bspw. mit adi_gps und if_variable), gebe ich article_custom mit eine andere time (past/future) Attribut anders aus. Der Baustein kann im Gründe so bleiben. In der o.g. Fall ist es leicht anders, da Beginn- und Enddatum in custom fields gespeichert sind (siehe meine andere mem_form Beispiel). Hier ändere ich der sort reihenfolge (custom_5 asc / desc) und verwende in mein Form msv_if_custom_article_date.

uy, jetzt könnte ich eventuell auf die Lösung stossen – da ich meine eigenen Bausteine angelegt habe, löschte ich alles in default, da ich dieses ja nicht benötige

Möglicherweise ist das der Grund – ist auch leicht zu testen.


TXP Builders – finely-crafted code, design and txp

Offline

#12 2010-05-07 15:42:47

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,477

Re: [de-de] [Erledigt] Sektionen ohne Artikel nicht in Navigation zeigen

Endlich komme ich dazu, zu antworten. Es lag definitiv am leeren Baustein default. Seit ich dort den ursprünglichen Inhalt einsetzte, funktioniert mein zuletzt angegebener Code und ebenso die verkürzte Version von jakob.

Noch hatte ich keine Zeit, meine Beispiele vom Anfang diesbezüglich zu überprüfen. Wegen nur einer Zeile Code rechtfertig sich aber wohl der dort verwendete, zusätzliche Baustein gar nicht.

Auf die Diskussion, ob ein Navigationspunkt wie “Ausstellungen” immer sichtbar sein sollte oder nicht, möchte ich nicht weiter eingehen. Sicher gibt es Fälle, wo dies sinnvoll ist (so wie von lythande und jakob aufgezeigt). In meinem aktuellen Fall möchte ich das anders. Und nun habe ich die Lösung dazu.

Ich danke allen, die hier mitgedacht haben und mich dazu brachten, den Fehler zu finden.

Offline

Board footer

Powered by FluxBB