2016-08-08 4 views
14

Ich möchte JavaScript-Code zu jeder einzelnen Post-Seite auf meinem Tumblr Blog hinzufügen. Ich habe folgendes, aber es scheint nie auf irgendeiner Seite zu erscheinen, geschweige denn nur der Permalink oder einzelne Post-Seiten. Ich habe viele Varianten hier mit dem Entfernen der Block PermalinkPage Block ohne Erfolg versucht. Was mache ich hier falsch?Wie füge ich JavaScript zu jeder Nicht-Indexseite meines Tumblr-Blogs hinzu?

<!-- Start JS --> 
{block:Posts} 
    {block:PermalinkPage} 
    <script type='text/javascript'> 
    __config = { 
      {block:Date},date:'{Year}-{MonthNumberWithZero}-{DayOfMonthWithZero} {24HourWithZero}:{Minutes}:{Seconds}'{/block:Date} 
      {block:PostSummary},title:{JSPlaintextPostSummary}{/block:PostSummary} 
      {block:HasTags},tags:[{block:Tags}'{Tag}', {/block:Tags}],{/block:HasTags} 
      ,url:'{URLEncodedPermalink}' 
    }; 
    (function(){ 
     var s = document.createElement('script'); 
     s.type = 'text/javascript'; 
     s.src = document.location.protocol + '//example.com/example.js'; 
     (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(s); 
    })(); 
    </script> 
    {/block:PermalinkPage} 
{/block:Posts} 
<!-- END JS --> 
+0

Warum nicht einfach das Javascript zu jeder Seite hinzufügen? Es wird dann mindestens – lharby

+0

zwischengespeichert werden, weil die Javascript App nicht auf der Hauptseite von foo.tumblr.com feuern sollte. Es sollte auf foo.tumblr.com/EveryPageButSearch feuern –

+0

Werfen Sie einen Blick auf diese: http://ejdraper.com/2009/12/13/advanced-tumblr-customization/ (knapp über die Hälfte nach unten). Verwirrenderweise bezieht sich der Tumblr-Block indexPage auf verschiedene Arten von Indexseiten. Sie können die Suchseite mithilfe der tumblr-Tags ausrichten, das Auslassen von Code ist jedoch komplexer. Ich kenne einen Weg, dies zu lösen, indem ich jquery verwende (von dem ich denke, dass es auf vanilla js portiert werden könnte), aber natürlich ist es hackiger und nicht so robust wie es in den tumblr-Tags eingestellt ist). – lharby

Antwort

9

So würde ich es mit JavaScript/Front-End lösen.

var path = document.location.pathname; 
path = path.split("/")[1]; // Should return the primary directory 
path = path.toLowerCase(); // This should catch your.tumblr.com/Search and your.tumblr.com/search 
if(path === "" || path === "search")){ 
    console.log('Index or Search page'); 
}else{ 
    // Run your function here 
} 

Grundsätzlich, wenn der Pfad URL leer ist oder gleich search dann nicht die Funktion ausführen, aber die Funktion in jedem anderen Fall auszuführen.

Wie ich bereits erwähnte, ist dies jedoch nicht 100% ig robust. Da der Pfad möglicherweise http://your.tumblr.com/# ist und die Funktion fehlschlägt, müssen Sie möglicherweise explizitere Logik erstellen (Sie können sagen, path !== " " für eine leere Zeichenfolge).

Ich bin mir immer noch nicht sicher, warum es keine gute Idee ist, dies auf jeder Seite zu haben. Es sei denn, Benutzer werden definitiv mit Seiten auf der Website verknüpft, die nicht über die Indexseite weitergeleitet werden. Und wenn Ihr JavaScript-Code nicht massiv ist, könnte er alle von der Indexseite aus zwischengespeichert werden (aber im Falle von Hotlinks usw. immer noch von allen anderen Seiten verfügbar sein).

EDIT

Wie pro Kommentar unten, ich habe ein grundlegendes Beispiel auf einem Test Tumblr-Konto erstellt.

Der Code sieht wie folgt aus:

var path = document.location.pathname; 
    path = path.split("/")[1]; 
    path = path.toLowerCase(); 
    if(path === "" || path === "about"){ 
    $('body').css('background','#F09'); 
    console.log('Index or about page'); 
    }else{ 
    $('body').css('background','#FC0'); 
    console.log('Other page'); 
    } 

Die Tumblr Seite ich verwende hier: http://sg-test.tumblr.com/

(Ich glaube nicht, dass es eine Suchseite ist, ist die Suchfunktion ein Block, den Sie einfügen oder aktivieren Sie es in Ihrer Vorlage und ist auf jeder Seite verfügbar.)

Die Funktion sucht grundsätzlich nach der Indexseite (leeres primäres Verzeichnis) oder der About-Seite (ersetzen Sie diese bei Bedarf durch 'Suchen' oder eine andere Seite).

Konsolenprotokolle werden auf jeder Seite ausgegeben. Und wenn der Pfad mit dem Index übereinstimmt, habe ich die Farbe für den Körper auf pink gesetzt, sonst ist jede andere Seite orange.

http://sg-test.tumblr.com/about (rosa Hintergrund)

http://sg-test.tumblr.com/post/134796799695/post-title (orange Hintergrund)

Nach dieser Logik sollte es einfach sein, die Funktion anzupassen Ihren Code auszuführen, wenn es die Pfadvariablen Anforderungen, wie in meinem ersten Beispiel trifft .

Wie ich bereits erwähnte, gibt es ein Problem mit . Dies ist effektiv immer noch die Indexseite, aber unser Test gibt für ein leeres Verzeichnis false zurück, obwohl Tumblr es auf die Homepage abbildet.

+0

Ich habe nichts dagegen, es von der Indexseite zu cachen. Ich möchte nur nicht, dass JS auf den Index- oder Suchseiten feuert. In den Fällen, in denen ich rede, werden die Nutzer definitiv mit den einzelnen Post-Seiten verknüpft. Ist es mit Tumblr-Tags möglich, wenn es auf jeder Seite ist, aber nicht feuert? –

+1

Es gibt keine Tumblr-Tags ausschließlich für die Startseite (obwohl es ein Tag für die Suchseite gibt), da die Vorlage in der Regel ein Codeblock für die gesamte Site ist. Die von mir vorgeschlagene Lösung würde also auf jeder Seite ausgeführt, aber nur ausgeführt, wenn sie die Kriterien erfüllt, nicht der Index oder die Suchseite zu sein. Würde es helfen, wenn ich ein Beispiel geben würde? – lharby

+0

Ich kann Ihren Code nicht auf einer anderen Seite als der Startseite aufrufen. Ein Beispiel wäre sehr hilfreich. Die console.log() feuert nicht einmal auf der Homepage. –

-3

Ich schob dies in meinen Sandbox-Blog, um zu sehen, was das Problem sein könnte, und es ist ein Stirn-Slapper, als ich die JS-Konsole überprüfte.

{block:Date},date: 

das Komma vor date entfernen und es sollte funktionieren. Lass es mich wissen, wenn du weitere Fragen hast.

+0

Ich habe versucht, die Felder zusammenzufassen, um nur * URL * einzuschließen, und es hat immer noch nicht funktioniert. –

+0

Überprüfen Sie die Seite und stellen Sie sicher, dass das Skript-Tag überhaupt nicht eingefügt wird? Gibt es Fehler in der JS-Konsole für diesen Bereich des Codes? Weil, als ich das Komma vor dem Datum entfernte, hat es das Skript-Tag gut eingeführt. – Ally

+0

Ja, ich habe den Browser für eine Post-Seite in einem separaten Fenster geöffnet und ich speichere meine Änderungen und verlasse den Editor, um 100% sicher zu sein und ich sehe immer noch nicht den JS. Ich habe auf Posts und Bilder (foo.tumblr.com/image/123) geschaut und ich sehe das JS nicht. –

Verwandte Themen