If-Else condition damit für eine Kategorie/Label ein bestimmter Link angezeigt wird

Kathrin_9

Aktives Mitglied
Liebe Forums-Mitglieder,

ich habe eine Frage zur Einbindung einer If-Else Condition zur Anzeige unterschiedlicher Links je Blog-Label. Wähle ich das Label Familie sollte kurz gesagt ein anderer Link angezeigt werden als wenn ich das Label Garten aufrufe. Ich habe es mit dem folgenden Code versucht, aber hier werden nach dem Parsen immer alle drei Links angezeigt und die Labels werden ignoriert.

Probiert habe ich folgenden Code:

<b:if cond='data:blog.url == data:blog.homepageUrl'>
<b:loop values='dataimage.gif?ost.labels' var='label'><b:if cond='data:label.name == "true"'>
<b:if cond='data:label.name == "Familie"'>
<div style="clear:both; margin:10px 0;text-align:center">
<a
Link 1
</a>
<p
class='text_werbung'>*)Anzeige</p>
</div>
<b:elseif cond='data:label.name == "Garten"'>
<div style="clear:both; margin:10px 0;text-align:center">
<a
Link 2
</a>
<p
class='text_werbung'>*)Anzeige</p>
</div>
</b:else>
<b:if cond='data:label.name == "Food"'>
<div style="clear:both; margin:10px 0;text-align:center">
<a
Link 3
</a>
<p
class='text_werbung'>*)Anzeige</p>
</div>
</b:if>
</b:if>
</b:if>
</b:loop>
<b:include data='post' name='post' />
</b:if>

Hat vielleicht wer eine Idee, wie man das richtig zum Laufen bekommen könnte?

LG Kathrin

 
Hi.

Wäre da nicht ein entsprechendes Forum die bessere Anlaufstelle?

<b:if cond='data:label.name == "true"'>

Warum diese Zeile? Du fragst dort, ob data:label.name "true" lautet, und in den nachfolgenden if-Statements schaust du, ob er "Familie" oder "Garten" lautet. Da passt schon was nicht zusammen.

Probiere erst einmal, ob es ganz grundlegend funktioniert, indem du nur das einleitende Statement verwendest und dir im Loop die Daten ausgeben lässt.

<b:if cond='data:blog.url == data:blog.homepageUrl'>
<b:loop values='data: post.labels' var='label'>
<data:label.name /><br>
</b:loop>
</b:if>


Was passiert dann?

 
Wenn Du mir ein entsprechendes Forum empfehlen könntest, wäre ich sehr dankbar!

Ich habe auch schon diese Variante probiert, aber auch hier werden mir immer beide Links angezeigt und nicht nur derjenige für das entsprechende Label

<b:loop values='data:post.labels' var='label'>
<b:if cond='data:label.name == ""'>
<div style="clear:both; margin:10px 0;text-align:center">


<div style="clear:both; margin:10px 0;text-align:center">

<a href=Link 1

</a>

<p class='text_werbung'>*)Anzeige</p>

</div>
</b:if>
<b:elseif cond='data:label.name == "Garten"'>


<div style="clear:both; margin:10px 0;text-align:center">

<a href=Link 2

</a>

<p class='text_werbung'>*)Anzeige</p>

</div>

</b:else>

</b:loop>


LG Kathrin

 
Wenn ich nur den grundlegenden Code eingebe, wird er zwar akzeptiert, aber ich sehe dann natürlich nichts auf meiner Seite...

 
aber ich sehe dann natürlich nichts auf meiner Seite...
Dann liegt da aber bereits ein Fehler vor, denn der grundlegende Code sollte die Labels eines Posts ausgeben. Bitte beachte, dass ich in dem Beispiel-Code ein zusätzliches Leerzeichen in der zweiten Zeile habe:

data: post.labels


So wäre es richtig:

<b:if cond='data:blog.url == data:blog.homepageUrl'>
<b:loop values='data:post.labels' var='label'>
<data:label.name /><br>
</b:loop>
</b:if>


Wenn das nichts anzeigt, dann ist der ganze Code schon nicht korrekt.

Prüfe bitte einmal, ob die erste Bedingung überhaupt erfüllt ist. Es greift nur, wenn data:blog.url gleich data:blog.homepageUrl ist.

Und sieh nach, ob die Links evtl. noch woanders auftauchen und vielleicht gar nicht aus dem Code stammen.

 
Zuletzt bearbeitet von einem Moderator:
Nein, es wird mir gar nichts angezeigt. Leider! Der Original-Code sah wie folgt aus:

<b:loop values='data:post.labels' var='label'>
<b:if cond='data:label.name == "Label-Name"'>
<div style="clear:both; margin:10px 0;text-align:center">
<!-- Paste Ad code here: Appear at mid of the post -->
</div>
</b:if>
</b:loop>


Der Code stammt von hier: https://www.techprevue.com/put-adsense-inside-blogger-post/

data: post.labels und data: label.name gibt es bei mir im Code

Ich wollte eigentlich nur haben, dass wenn ein Beitrag mit dem Label Garten aufgerufen wird, mir ein Banner zum Thema Garten angezeigt wird und wenn das Thema Essen aufgerufen wird, ein Banner passend zum Essen. Ich hätte nicht gedacht, dass das so verdammt schwer ist...

LG Kathrin

 
Und warum das hinzugefügte erste Statement?

<b:if cond='data:blog.url == data:blog.homepageUrl'>


Lass das mal weg und schau, was passiert.

 
Ich hab das hinzugefügt, weil ich dachte es muss so sein.

Wenn ich das weglasse, wird der Code ganz normal geparset, aber es wird mir nicht ein bestimmter Link für ein bestimmtes Label angezeigt, sondern immer alle drei. Die Labels werden einfach ignoriert :(

LG Kathrin

 
Ich habe auch diese Variante probiert, mit dem selben Ergebnis, es werden alle drei Links angezeigt und die Labels werden ignoriert...

Code:
<b:if cond='data:post.labels any (label => label.name == "Familie")'>
<!-- link 1 -->
</b:if>
<b:if cond='data:post.labels any (label => label.name == "Garten")'>
<!-- link 2 -->
</b:if>
<b:if cond='data:post.labels any (label => label.name == "Food")'>
<!-- link 3 -->
</b:if>
 
Ich hab das hinzugefügt, weil ich dachte es muss so sein.
Ok. Sehr wahrscheinlich ist das nicht so. ?

Bitte versuche noch einmal diesen Block außerhalb aller Änderungen, die du bisher vorgenommen hast, und teile ein Ergebnis hier mit:

Code:
<b:loop values='data:post.labels' var='label'>
  <b>Label:</b> data:label.name /><br>
</b:loop>
 
Ich hab den Code immer geparset und dort eingefügt, wo nur reines HTML gelesen wird, weil ich möchte, dass die Links im Footer-Bereich angezeigt werden. Kann es sein, dass es deswegen nicht funktioniert, weil der Code nicht allein im HTML-Segment stehen darf?

Aber in der geparsten Version, im HTML-Bereich wird mir jetzt am Blog folgendes angezeigt: Label: data:label.name />

 
Zuletzt bearbeitet von einem Moderator:
Aber in der geparsten Version, im HTML-Bereich wird mir jetzt am Blog folgendes angezeigt: Label: data:label.name />
Dann scheint es prinzipiell zu klappen, der Code war nur kaputt und mir war es nicht aufgefallen, bitte versuche folgendes noch einmal:

Code:
<b:loop values='data:post.labels' var='label'>
  <b>Label:</b> <data:label.name /><br>
</b:loop>
 
Dann zeigt er einfach Label: an. Könnte es daran liegen, dass ich die Blog Labels an dieser Stelle nicht ansprechen kann?

 
Dann ist data:label.name leer. Der Loop geht aber einmal durch, also muss es einen Eintrag in den Labels geben, d.h. du kannst sie ansprechen.

Bei Einträgen mit mehreren Labels sollte "Label:" dann auch häufiger stehen.

Wäre data:post.labels nicht ansprechbar, würde der Loop ja nicht ein Mal ausgeführt.

Der Name scheint falsch zu sein, probiere folgendes:

Code:
<b:loop values='data:post.labels' var='label'>
  <b>Label:</b> <data:postLabelsLabel/><br>
</b:loop>
 
Hmhmhm.

Hab mir eben selbst einen Account erstellt. Möglicherweise machst du es an der falschen Stelle.

Der Code muss innerhalb des post-Loops sein, das ist der Loop, der so beginnt:

Code:
<b:loop values='data:posts' var='post'>
 
Ich habe inzwischen eine Lösung gefunden, wo der folgende Code:

<b:if cond='data:post.labels any (label => label.name == "Familie")'>

<div style="clear:both; margin:10px 0;text-align:center">

<!-- link 1 -->

</div>

</b:if>

<b:if cond='data:post.labels any (label => label.name == "Garten")'>

<div style="clear:both; margin:10px 0;text-align:center">

<!-- link 2 -->

</div>

</b:if>

<b:if cond='data:post.labels any (label => label.name == "Food")'>

<div style="clear:both; margin:10px 0;text-align:center">

<!-- link 3 -->

</div>

</b:if>

<b:if cond='data:post.labels any (label => label.name not in {"Garten","Familie","Food"}

)'>

<div style="clear:both; margin:10px 0;text-align:center">

<!-- link 4 -->

</div>

</b:if>

nach

Code:
<div class='post-footer'> einefügt wird. Das funktioniert zwar tadellos und ich bekomme es jetzt richtig angezeigt, habe aber nun das Problem, dass die Werbung nun auch zwischen den Beiträgen auf der Startseite erscheint. Dort will ich sie aber nicht haben. Ich bin ratlos...
 
Ein Problem gibt es auch mit diesem Befehl:

<b:if cond='data:post.labels any (label => label.name not in {"Garten","Familie","Food"})'>

Ich möchte, dass der Link dieser Bedingung nur dann angezeigt wird, wenn die Labels Garten, Familie und Food nicht zutreffen... Es wird mir aber jetzt einfach immer angezeigt

LG Kathrin, die schon am verzweifeln ist

 
Moment, ich habe nun any mit none ersetzt, aber nun zeigt es mir bei den meisten Beiträgen gar nichts an, wenn sie nicht unter Garten, Food und Familie laufen. Wie mache ich das richtig, dass Link 4 dann gesetzt wird, wenn weder Garten, Food und Familie zutreffen?

Das Problem mit dem Footer konnte ich lösen. Jetzt bleibt nur noch das mit dem Lambda Operator für alle Labels, die nicht Garten, Food, Familie sind.

LG Kathrin

 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben