2016-05-25 4 views
3

Google Blogger hat eine neue Gruppe von Lambda-Ausdrucksoperatoren für seine Vorlagensprache implementiert. Siehe: https://blogger.googleblog.com/2016/05/more-custom-template-flexibility.html und https://productforums.google.com/forum/#!topic/blogger/l3phi8bscGY.Verwendung von Google Blogger Lambda-Operatoren

Der Beispielcode angegeben (die b: if/geändert) ist:

<!-- Show a Flower image if the post has the label flower --> 
<b:if cond='data:post.labels any (l => l.name == "Flower")'> 
    <img src=’/img/flower.jpg’ /> 
</b:if> 

ich kann nicht herausfinden, wie diese in einer Vorlage zur Arbeit zu kommen. Würde jemand bitte einen Arbeitscode zur Verfügung stellen, den ich in eine Vorlage einfügen und sehen könnte, dass es funktioniert.

UPDATE: Dies scheint zu funktionieren. Aber wie oder kann ich die Schleife entfernen?

<b:section class='Test1' id='Test1' maxwidgets='' showaddelement='no'> 
    <b:widget id='Blog2' locked='true' title='Blog Posts' type='Blog' version='1' visible='true'> 
     <b:includable id='main'> 

      <b:loop values='data:posts' var='post'> 
       <h1>Post found</h1> 

       <b:if cond='data:post.labels any (label => label.name == "flower")'> 
        <h1>Flower!</h1> 
       </b:if> 

      </b:loop> 
     </b:includable> 
    </b:widget> 
</b:section> 

Zum Beispiel, wenn ich die Schleife entfernen und ersetzen Sie es mit:

<b:if cond='data:posts any (p => p.title != "bob")'>     
    <h1>Post found</h1>   
</b:if>> 

Nur ein Post gefunden wird, wenn ich mehrere Beiträge haben von denen keines dem Titel bob werden! Ich habe versucht, den Lambda-Operator von jedem zu wechseln, um ohne Änderung zu filtern.

Antwort

3

Die Lösung für mein Problem

dumm von mir, wenn ich erwarte, dass eine Schleife ich eine Schleife angeben muß verwenden können:

<b:loop values='data:posts filter (p => p.id != 0)' var='post'>      
    <h1>Post found: <data:post.title/></h1>   
</b:loop> 

Wie Blogger Lambda-Operatoren verwenden,

Für diejenigen, die hier versuchen, Hilfe zu finden, empfehle ich den folgenden Artikel, der erklärt, wie man Lambda Ausdrücke ziemlich umfassend verwendet: http://www.bloggerever.com/2016/05/what-are-exactly-bloggers-lambda.html und basiert auf https://productforums.google.com/forum/#!topic/blogger/l3phi8bscGY.

Im Wesentlichen gibt es 7 Lambda Betreiber

  • jede
  • alle
  • keine
  • Zählung
  • Filter
  • Karte
  • erste

Jeder von diesen kann entweder innerhalb einer bedingten Anweisung if oder einer Schleife verwendet werden. Einige nicht getestete Beispielcode folgt, um Ihnen den Einstieg zu erleichtern.

Der jeder Operator gibt true zurück, wenn alle Elemente in dem Lambda return true, so zum Beispiel, würde der folgende Code true zurück, wenn ein Post ein Etikett LabelA oder labelb mit ihm verbunden hat:

<b:if cond='data:post.labels any 
       (l => l.name in {"labela","labelb"})'> 
     ...Code here... 
</b:if> 

alle zurückkehren würde wahr, wenn es beide LabelA und labelb mit ihr verbunden hatte:

<b:if cond='data:post.labels all 
       (l => l.name not in {"labela","labelb"})'> 
     ...Code here... 
</b:if> 

keine wo ULD return true, wenn es weder LabelA und labelb mit ihr verbunden hat:

<b:if cond='data:post.labels all 
       (l => l.name not in {"labela","labelb"})'> 
     ...Code here... 
</b:if> 

Zählung 0 zurückkehren, 1 oder 2, je nachdem, ob ein Posten mit ihm weder LabelA oder labelb assoziiert hatte, oder einfach nur LabelA oder beides LabelA und labelb

<b:if cond='data:post.labels count 
       (l => l.name not in {"labela","labelb"})'> 
     ...Code here... 
</b:if> 

Filter wird ein Array zurück und erfordert eine Schleife. Das unten stehende Beispiel würde den Titel eines jeden Post ausdrucken, es sei denn es eine ID von 0 hatte (was ich tun ist nicht möglich!)

<b:loop values='data:posts filter (p => p.id != 0)' var='post'>      
    <h1>Post found: <data:post.title/></h1>   
</b:loop> 

erste wie Filter, sondern wird das erste Spiel nur zurück.

<b:loop values='data:posts first(p => p.timestamp == "4.2.09")' var='post'>      
    <h1>Post found: <data:post.title/></h1>   
</b:loop> 

Karte einen Array zurückgibt jedes Ergebnis aus dem Lambda enthält. Der folgende Code würde Beschriftungen in einem h1-Tag mit >> vorangestellt anzeigen.

<b:loop values='data:post.labels map (l=> ">>" + l.name)' var='label'> 
    <h1><data:label/></h1> 
</b:loop> 

Eine letzte Anmerkung: der Artikel verknüpft schlägt das Lambda einzigen schreiben angewandt werden kann, Label und Elemente kommentieren. Es funktioniert sicherlich mit den ersten beiden, aber ich habe es nicht mit Kommentaren versucht.

+1

Danke das hilft mir sehr. : D – OdraEncoded

Verwandte Themen