(TMS) Template Modification System Fragen

TaTü

Bekanntes Mitglied
Lizenzinhaber
Registriert
12. Dez. 2010
Beiträge
729
Punkte
108
Moin. Ich bin ganz froh das sich jemand bereit erklärt hat das für´s xf zu Coden noch dankbarer das es in´s deutsche übersetzt wurde ;), dennoch hab ich ein paar Fragen da ich mich damit "noch" nicht so gut auskenne und hoffe, das mir jemand helfen kann.

Beispiel:
Ich möchte ein paar Zeilen extra Code in ein Template hinzufügen.
  • Modification: (Ich denke hier gebe ich einen persöhnlichen Wiedererkennungstitel ein)
  • Template:
  • Original Template Text:
sind verständlich, wo es bei mir hapert sind
  • Description: (hier auch den Wiedererkennungstitel?)
  • Execution Order: (immer auf 10 lassen? Was bedeutet das)
  • Modification Type, und hier im besonderen (Was setzen, bei welchen Veränderungen)
  1. String Replace
  2. Preg Replace
  3. PHP Callback
Was mache ich wenn ich einen Code komplett raus nehmen will, im Grunde "Ersetzen gegen nichts"
Besten Dank.
 
Ne Menge Fragen und ich versuche sie einmal alle zu beantworten :)

Description = Zusätzliche Information für dich - Also was macht diese Änderung (Beispiel Kategorietrennung oben)

Execution Order = Die Reigenfolge, in der Änderungen durchgeführt werden. Dies ist wichtig, wenn du mehrere Änderungen im selben Template oder sogar an der selben Stelle hast. Dann sollten diese Änderungen so durchgeführt werden, dass du dir keine voehrigen Änderungen wieder löscht. Auch hier wieder ein Beispiel
Execution Order = 10
Suche XXXXXXXXXXXXXXXXXX
Erstze durch XXXXXXXXXXXXXXXXXX YYYYYYYYYYYYYYYYYYY

Execution Order = 20
Suche nach YYYYYYYYYYYYYYYYYYY (was ja nun neu ist)
Ersetze durch YYYYYYYYYYYYYYYYYYY ZZZZZZZZZZZZZZZZZZZZZZZZZZ

Es wäre blöde, wenn du zuerst nach "Execution Order = 20" suchen würdest, da es diesen Code zu dem Zeitpunkt noch gar nicht gibt. Ist zwar ein sehr einfaches Beispiel, aber es sollte den Sinn erklären.

  • Zeichenkette anpassen (String Replace)
  • Regulären Ausdruck anpassen (Preg Replace)
  • PHP-Callback-Methode:
An sich nutzt du zu 90% Zeichenkette anpassen (String Replace). Um mit regulären Ausdrücken arbeiten zu können (oder gar mit der PHP-Callback-Methode solltest du dich etwas in diesem Bereich auskennen. Einen ganz kleinen Überblick findest du bei Wikipedia.(Beruflich nutze ich Reguläre Ausdrücke um in großen Tabellen alle Zeichen bis zu einem Zielzeichen in einer Zeile zu löschen oder solche Dinge halt :D)

"Ersetzen gegen nichts" ist ebenso einfach. XXXXXXXXXXXXXXXXXX willst du "löschen"

Also Suche nach
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYY

Ersetze durch
YYYYYYYYYYYYYYYYYYY

und schon sind alle XXXXXXXXXXXXXXXXXX weg :)
 
Hallo und vielen Dank für die ausführlichen Erklärungen.
Preg Replace werd ich wohl nicht nutzen, da es bei mir meist nur um ersetzen, erweitern des Codes geht.


Was ich allerdings immer noch nicht verstehe, kann sein das ich mich da ein bisschen schwer tue...
Ich versuchs mal mit nem Template Beispiel:

Ich hab das navigation Template und möchte (nur als Beispiel) diesen Code komplett raus haben?
Code:
        <xen:if is="{$showHomeLink}">
            <li class="navTab home PopupClosed"><a href="{$homeLink}" class="navLink">{xen:phrase home}</a></li>
        </xen:if>

dann schreibe ich in den Replace Teil nichts?
 
Dann, als Beispiel

Suche nach
Code:
        <!-- home -->
        <xen:if is="{$showHomeLink}">
            <li class="navTab home PopupClosed"><a href="{$homeLink}" class="navLink">{xen:phrase home}</a></li>
        </xen:if>

Ersetze durch
Code:
        <!-- home -->
 
Upps das ging ja schnell ;)


Ich mein ich versteh worauf das hinaus läuft, also was ich wie ersetzen muss, aber nur um Sicher zu sein.
Ich habe diesen Code....
Code:
        <xen:if is="{$showHomeLink}">
            <li class="navTab home PopupClosed"><a href="{$homeLink}" class="navLink">{xen:phrase home}</a></li>

...und könnte ihn jetzt auch ausklammern durch <!-- ... //--> oder einfach irgendwas hinschreiben HTML Konform natürlich.... Ich denk ich habs nu ;)

Und zum Code Erweitern, ersetzen oder gar (wie in diesem Beispiel) löschen, nutze ich dann immer "Zeichenkette anpassen"?!
 
...und könnte ihn jetzt auch ausklammern durch <!-- ... //--> oder einfach irgendwas hinschreiben HTML Konform natürlich.... Ich denk ich habs nu ;)
ich würde vorschlagen, adss du anstatt den html kommentaren die xen kommentare benutzt
<xen:comment> folgender teil wird nicht ausgegeben </xen:comment>

Der Vorteil ist, dass <xen:comment> garnicht ausgegeben wird, im Gegensatz zum normalen <!-- Html Kommentar.
 
Am sinnvollsten erachte ich es immer noch keinen zusätzlichen Code bei einer Löschung von Code einzufügen, selbst wenn es nur Kommentare sind, da dieses sich wieder zum Zusammenspiel mit einer anderen TMS Änderung zu Konflikten führen kann. Daher halte ich es für besser einen (oder mehrere) Zeilen des umgebenden Codes zur Lokalisierung und zur Ausführung zu nutzen. ;)
 
hallo und guten Morgen, ich teste gerade einiges und möchte gerne einige änderungen über das tms eintragen,dabei ist mir aufgefallen das gewisse dinge nicht funktionieren über einfaches ersetzen:
geht:

Suche:
Code:
<div id="header">

ersetze:
Code:
<div id="header">
<xen:include template="right_content_area" />

geht nicht !
Suche:
Code:
<div id="header">

ersetze:
Code:
<div id="header">
<xen:if is="@showRightContentArea"><xen:include template="right_content_area" /></xen:if>

warum funktioniert das nicht oder muss ich das als Regulärer Ausdruck bzw. PHP-Callback-Methode umschreiben (wenn ja wie?)
mfg und thx
 
1. Frage: Reden wir von dem 3rd Party-Addon oder von der Core-Funktion in 1.2?

2. Wenn wir von der Core-Funktion reden... Was geht denn dann nicht?

Edit: Achso an dem if scheiterts.
Also wenn ich das direkt im Template editiere, sagt er, dass das eine ungültige Bedingung ist. Was ist denn dieses showRightContentArea? Ist das eine Variable? Die müsste so in das if rein: {$showRightContentArea}.
Wenns eine Style-Variable ist, dann geht das z.B. mit @contentText. Aber es scheint als ob diese Variable auch existieren muss, sonst kommt dieser Fehler.
 

Anhänge

  • Bildschirmfoto 2013-08-26 um 11.08.50.png
    Bildschirmfoto 2013-08-26 um 11.08.50.png
    168,8 KB · Aufrufe: 10
Zuletzt bearbeitet:
Gibt es bei dem Core TMS die Möglichkeit nach Style, Änderungen zu erstellen? Im Add-on geht es.
 
habe es mir fast gedacht.

Danke
 
Mit einem Template Callback lässt sich das lösen.
Crashkurs Callbacks:
http://www.xendach.de/resources/xen-callback-php-code-in-xenforo-templates-einbetten.59/

Dafür eine Datei anlegen, die nach dem Muster:
http://www.xendach.de/resources/dateinamen-in-xenforo.58/

benannt ist - wer sich strikt an das Beispiel halten will, muss sie in library/XenDACH ablegen und TMSStyle.php nennen.

Dort kommt das rein:
PHP:
<?php

class XenDACH_TMSStyle {
   
    public static function getStyleIdOnly($original) {
       
        $user = XenForo_Visitor::getInstance();
       
        if($user->get('style_id') == 2) {
       
            return str_replace('<span>Post New Thread</span>', '<span>Neue Diskussion</span>', $original);
           
        } else {
           
            return $original;
           
        }
       
    }
   
}

Was passiert hier? Hier wird der Button mit der Beschriftung "Post New Thread" in "Neue Diskussion" umbenannt. Allerdings nur der unten, weil der oben nicht in dem Template ist. Dazu gleich mehr. Das betrifft ausserdem nur die Style-ID 2.

Für das Beispiel sieht die Template-Modifikation so aus:

Template: forum_view
Modification Key: renamenewthread
Search Type: Regular expression
Find: /(.+)/is
Replace: <xen:callback class="XenDACH_TMSStyle" method="getStyleIdOnly">$1</xen:callback>

Was passiert hier?
Es wird das Template "forum_view" genommen und komplett an den Callback übergeben. Allerdings wird NICHT das Template, wie es in XenForo zu bearbeiten ist, an den Callback gegeben, sondern bereits das anzeigefertige Template. Das bedeutet beispielsweise, dass keine Sprachvariablen mehr enthalten sind, sondern schon ausformulierte Texte.

In der Funktion s.o., also im Callback, steht dieser Inhalt in der Variable $original zur Verfügung. Damit kann man dann machen, was man möchte, beispielsweise mit str_replace etwas suchen und ersetzen.

Es gibt hierbei einen Stolperstein. Nicht alles, was in einem XenForo-Template definiert wird, wird auch in dessen Box gerendert. Beispielsweise Dinge, die sich in dem Tag <xen:h1> befinden, werden im Header angezeigt und nicht (in diesem Fall) in forum_view.

Weiterhin gibt es zu beachten, dass die individuelle Style-Einstellung des Users abgefragt wird. Das bedeutet, dass der Standard-Style 2 IDs haben kann, nämlich 0 und die ID des Styles. Das sollte bei der Abfrage beachtet werden.

Dieser Weg ist allerdings ziemlich technisch und setzt ein wenig PHP-Kenntnisse voraus. Einfacher wäre es in solchen Fällen, den Template-Editor oder das externe TMS-Addon zu verwenden.
 
Zurück
Oben