2017-10-16 4 views
0

Dieser Code-Schnipsel wunderbar auf Hugo arbeitet:Concatenate Variable in Hugo

{{ if and (or .IsPage .IsSection) .Site.Params.contentCommitsURL }} 
        {{ $File := .File }} 
        {{ $Site := .Site }} 
        {{with $File.Path }} 
        <a href="{{ $Site.Params.contentCommitsURL }}{{ replace $File.Dir "\\" "/" }}{{ $File.LogicalName }}" target="blank">Link to API call</a> 
        {{ end }} 
       {{ end }} 

Mit,

[Params] 
contentCommitsURL = https://api.github.com/repos/csitauthority/CSITauthority.github.io/commits?path=HUGO/content/ 

es in der Lage ist zu schön erzeugen den folgenden Link

Link to API call

in der layout HTML-Datei.


Problem Beschreibung

Die URL generiert wird. Ich ziehe Haare nun versuchen, herauszufinden, wie die Befehle { $Site.Params.contentCommitsURL }}{{ replace $File.Dir "\\" "/" }}{{ $File.LogicalName }} in einer Seite Variable verketten wie {{ $url }}

Zum Beispiel:

{{ $url := {{ $Site.Params.contentCommitsURL }}{{ replace $File.Dir "\\" "/" }}{{ $File.LogicalName }} }} 

nicht

funktioniert aber das folgende tut:

{{ $url := "https://api.github.com/repos/csitauthority/CSITauthority.github.io/commits?path=HUGO/content/post/vlan-101.md"}} 

ich möchte in der Lage sein, so etwas zu tun:

{{ $url := $Site.Params.contentCommitsURL + (replace $File.Dir "\\" "/") + $File.LogicalName }} 

^Offensichtlich, das funktioniert nicht. Ich will wissen was macht.

Antwort

0

Auf dem Hugo-Diskurs-Forum, jemanden hinted a solution und ich war in der Lage, mit dem folgenden zu kommen.

{{ if and (or .IsPage .IsSection) .Site.Params.contentCommitsURL }} 
     {{ $File := .File }} 
     {{ $Site := .Site }} 
     {{with $File.Path }} 
     {{ $fileDir := replace $File.Dir "\\" "/"}} 
     {{ $url := $File.LogicalName | printf "%s%s" $fileDir | printf "%s%s" $Site.Params.contentCommitsURL }} 
     {{ $.Scratch.Set "url" $url }} 
     {{ end }} 
    {{ end }} 

Wo ich es angezeigt werden soll, verwende ich die Scratch Funktion wie folgt aus:

{{ $url := $.Scratch.Get "url"}} 
    {{ range getJSON $url }} 
    <div style="display:inline-block; width:40px;"><a href="{{.author.html_url}}" target="_blank"> 
    <img src="{{.author.avatar_url}}" alt="{{.author.login}}" text="{{.author.login}}" class="inline" width="40" height="40" style="height: 40px;height: 40px; vertical-align:middle; margin: 0 auto;"></a> 
    </div> 
    {{ end }} 

Der Code ist selbsterklärend, so dass ich nicht mit einer ausführlichen Beschreibung stören. Stattdessen möchte ich Ihre Aufmerksamkeit auf die Implementierung lenken. Sie werden feststellen, dass die Scratch-Funktion verwendet wurde.

Die hugo Dokumentation sagt dies:

Variablen innerhalb definiert, wenn conditionals und ähnliches auf der Außenseite nicht sichtbar sind.

(see this issue)

Es ist eine Abhilfe, die vorübergehend Speichern des Wertes beinhaltet. here's more on scratch

Einschränkungen

Ab diesem Moment fühle ich mich dieser Code nicht vollständig ist. Es funktioniert aber, es zeigt den Autor basierend auf Commits.Mehrere Commits erzeugen also denselben Autor mehrere Male. Ich bringe diese Einschränkung zur Kenntnis, um eine kreative Lösung zu entwickeln. Ich werde diese Antwort aktualisieren, wenn ich eine zufriedenstellende Antwort bekomme. In der Zwischenzeit können Sie vorschlagen.

here ist meine ursprüngliche Antwort auf hugo Diskurs.