Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
#1 2009-09-30 04:17:18
- GugUser
- Member
- From: Quito (Ecuador)
- Registered: 2007-12-16
- Posts: 1,477
[de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
Dieser neue Beitrag bezieht sich auf Überlegungen, welche ich bei einer früheren Frage – Bedingungen für if_category und if_article_category zusammenfassen – und den entsprechenden Argumentationen gemacht hatte, #7 und #13.
Statt einmal für <txp:if_category>
und ein zweites Mal für </txp:if_article_category>
die folgende Kombination zu schreiben, …
Nachtrag: Dafür gibt es unterdessen eine elegantere Lösung
<txp:if_category name="R">Text R
<txp:else /><txp:if_category name="S">Text S
<txp:else /><txp:if_category name="T">Text T
<txp:else /><txp:if_category name="U>Text U
<txp:else /><txp:if_category name="V">Text V
<txp:else />Text A
</txp:if_category></txp:if_category></txp:if_category></txp:if_category></txp:if_category>
… könnte das ganze – so meine Überlegung – zwischen <txp:php> … </txp:php>
in PHP formuliert werden. Mir scheint, mit der switch-case-Anweisung wäre das eine Möglichkeit, welche eine gute Übersicht der eventuell später zu ändernden Texte bieten würde. Ein Kode, der die Variable $cat verarbeiten würde, könnte so aussehen:
switch ($cat) {
case "R":
$title = "Text R";
break;
case "S":
$title = "Text S";
break;
case "T":
$title = "Text T";
break;
case "U":
$title = "Text U";
break;
case "V":
$title = "Text V";
break;
default:
$title = "Text A";
}
echo $title
$cat würde der Kategorie entsprechen, also den Wert von ‘name’ innerhalb der Tags <txp:if_category>
oder </txp:if_article_category>
bekommen, ein Wert von R bis V. Also aus irgendetwas wie der folgenden Zusammenstellung:
(if_category(array('name' => '$cat')) || if_article_category(array('name' => '$cat')))
Aus welchem Zusammenhang es auch wäre, $cat ist immer etwas zwischen R bis V.
Meine PHP-Kenntnisse sind leider bescheiden. Ich verstehe nicht, wie ich diese beiden Teile zusammenbringen kann, also einerseits dieses $cat der Kategorie oder der Artikelkategorie zu extrahieren und anderseits als Variable zu definieren, welche dann von der switch-case-Anweisung übernommen werden kann.
Am Schluss muss als einziges Ergebnis aus der Operation einer der vorgegebenen Texte zwischen Text R bis Text V oder Text A stehen.
Gibt es in diesem Forum jemanden, der meine Überlegungen nachvollziehen kann und eine Lösung dazu weiss?
Ich hoffe, ich sei mit dem hier dargelegten nicht ganz daneben … Falls das funktionieren könnte, wäre es eine elegante Lösung.
Last edited by GugUser (2009-10-03 18:45:49)
Offline
Re: [de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
Sorry, ich habe dein Post nicht in Detail durchgearbeitet, aber vielleicht hilft Dir noch einer von Stef Dawsons menagerie – smd_multi_choice – zu erreichen was Du möchtest, weil es ein txp:tag für case/switch-situationen bietet.
A generic ‘if condition’ tester that can take action if some article, file, link, URL, <txp:variable /> or global PHP variable matches one or more tests. The difference between this and smd_if is that you do not need to nest successive tests because it performs comparisons using a switch… case construct.
TXP Builders – finely-crafted code, design and txp
Offline
Re: [de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
Wenn Du nur Kategorie1 zuordnest:
<txp:variable name="R" value="Text R" />
<txp:variable name="S" value="Text S" />
<txp:variable name="T" value="Text T" />
<txp:variable name="U" value="Text U" />
<txp:variable name="V" value="Text V" />
<txp:variable name="default" value="Text A" />
<txp:if_category>
<txp:variable name='<txp:category />' />
<txp:else />
<txp:if_article_category>
<txp:variable name='<txp:category1 />' />
<txp:else />
<txp:variable name="default" />
</txp:if_article_category>
</txp:if_category>
Wenn Du beide Kategorien verwendest, können auch zwei Texte ausgeben werden, oder auch nicht, wenn Du da noch ein else-statement reinbastelst:
<txp:variable name="R" value="Text R" />
<txp:variable name="S" value="Text S" />
<txp:variable name="T" value="Text T" />
<txp:variable name="U" value="Text U" />
<txp:variable name="V" value="Text V" />
<txp:variable name="default" value="Text A" />
<txp:if_category>
<txp:variable name='<txp:category />' />
<txp:else />
<txp:if_article_category>
<txp:if_article_category number="1">
<txp:variable name='<txp:category1 />' />
<txp:if_article_category>
<txp:if_article_category number="2">
<txp:variable name='<txp:category2 />' />
<txp:if_article_category>
<txp:else />
<txp:variable name="default" />
</txp:if_article_category>
</txp:if_category>
Digital nomad, sailing the world on a sailboat: 32fthome.com
Offline
#4 2009-09-30 12:21:38
- GugUser
- Member
- From: Quito (Ecuador)
- Registered: 2007-12-16
- Posts: 1,477
Re: [de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
Nachtrag: Der oben stehende Kode von trenc ist die Lösung mit TxP-Tags, wie ich nach langen Umwegen feststellen musste.
Wie ich hier schon schrieb, hatte ich mein Problem vorübergehend mit den üblichen TxP-Tags und Variablen gelöst. Das sieht im betreffenden Baustein so aus:
<txp:variable name="biodigestor" value="El biogás producido en el biodigestor es una energía limpia y sostenible" /><txp:variable name="ciclotransporte" value="El ciclotransporte es ecológico, económico, silencioso y sin contaminar" /><txp:variable name="descontaminacion-de-aguas" value="Descontaminación de aguas servidas con circulación y plantas acuáticas" /><txp:variable name="energia-solar" value="La energía solar es una energía limpia que no contamina el medio ambiente" /><txp:variable name="energia-eolica" value="Sistemas eólicos para la generación de energía eléctrica de bajo costo" /><txp:variable name="title-estandard" value="Tecnologías limpias, energías renovables y sin contaminar, energías sostenibles" /><txp:if_category name="biodigestor"><txp:variable name="biodigestor" /><txp:else /><txp:if_article_category name="biodigestor"><txp:variable name="biodigestor" /><txp:else /><txp:if_category name="ciclotransporte"><txp:variable name="ciclotransporte" /><txp:else /><txp:if_article_category name="ciclotransporte"><txp:variable name="ciclotransporte" /><txp:else /><txp:if_category name="descontaminacion-de-aguas"><txp:variable name="descontaminacion-de-aguas" /><txp:else /><txp:if_article_category name="descontaminacion-de-aguas"><txp:variable name="descontaminacion-de-aguas" /><txp:else /><txp:if_category name="energia-solar"><txp:variable name="energia-solar" /><txp:else /><txp:if_article_category name="energia-solar"><txp:variable name="energia-solar" /><txp:else /><txp:if_category name="energia-eolica"><txp:variable name="energia-eolica" /><txp:else /><txp:if_article_category name="energia-eolica"><txp:variable name="energia-eolica" /><txp:else /><txp:variable name="title-estandard" /></txp:if_category></txp:if_article_category></txp:if_category></txp:if_article_category></txp:if_category></txp:if_article_category></txp:if_category></txp:if_article_category></txp:if_category></txp:if_article_category>
Mir gefällt die Lösung – obwohl sie in der Praxis funktioniert – nicht, weil sie für spätere Textänderungen unübersichtlich ist und mir mit all den Wiederholungen wie gebastelt erscheint.
Die Tags folgen übrigens ohne Zeilenumbruch einem dem andern, weil sonst im Quelltext mehrzeilige Lücken entstehen würden, was mich stört, auch wenn’s – ich weiss – tausende Leute geben wird, die mir sagen werden, das spielt doch keine Rolle …
Diesen neuen Themenbeitrag schrieb ich, weil es mich interessieren würde, ob der oben erwähnte Ansatz mit PHP umsetzbar wäre. Ich nehme an ja, nur fehlen mir die notwendigen Kenntnisse dazu. Ich habe zwar über PHP gelesen, weiss danach wie Variablen funktionieren und auch wie die switch-case-Anweisung, mir fehlt aber das Wissen, wie das nun kombiniert wird.
Last edited by GugUser (2009-10-03 03:24:29)
Offline
Re: [de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
Wenn es Dir nur um das Aussehen geht, nimm Deine oder einer meiner Lösungen, schreib Sie schön mit untereinander mit Tabs oder Leerzeichen eingerückt. So kann man Textänderungen später auch schön pflegen. Dann installierst Du Dir aks_header und entfernst damit in der Quellcode-Ausgabe die Zeilenumbrüche, Leerzeichen, Tabulatoren etc. pp. Schöner kurzer, kompakter Quellcode in einer Zeile.
Ansonsten kann Du das auch mit PHP machen, allerdings wage ich bezweifeln, dass das lesbarer, geschweige denn pflegbarer ist. Textpattern hat so schöne eigene Boardmittel.
<txp:php>
if ($is_article_ist)
{
global $c;
if (!empty($c))
{
echo get_cats_texts($c);
}
else
{
echo get_cats_texts();
}
}
else
{
global $thisarticle;
if (!empty($thisarticle['category1']))
{
echo get_cats_texts($thisarticle['category1']);
}
elseif (!empty($thisarticle['category2']))
{
echo get_cats_texts($thisarticle['category2']);
}
else
{
echo get_cats_texts();
}
}
function get_cats_texts($cat = 'A')
{
switch ($cat)
{
case 'A':
$text = 'Text A';
case 'R':
$text = 'Text R';
break;
case 'S':
$text = 'Text S';
break;
case 'T':
$text = 'Text T';
break;
case 'U':
$text = 'Text U';
break;
case 'V':
$text = 'Text V';
break;
default:
break;
}
return $text;
}
</txp:php>
P.S.: PHP-Code ist nur schnell hingeschrieben und nicht getestet.
Last edited by trenc (2009-09-30 13:25:10)
Digital nomad, sailing the world on a sailboat: 32fthome.com
Offline
#6 2009-09-30 14:32:33
- GugUser
- Member
- From: Quito (Ecuador)
- Registered: 2007-12-16
- Posts: 1,477
Re: [de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
@ jakob
Danke für den Tipp, allerdings kann ich bei jenem Plug-In nicht erkennen, wie es bei meinem Anliegen nützlich sein könnte.
@ trenc
Auch dir Danke für den Plug-In-Tipp, ich werde mir das anschauen, weil mich die Leerzeilen im durch TxP ausgegebenen Quelltext nicht befriedigen.
Danke für deinen PHP-Kode-Vorschlag, zu dem ich einige Fragen habe oder Bemerkungen machen möchte.
Ich nehme an, in der zweiten Zeile müsste es if ($is_article_list)
heissen …
Gemäss meiner Interpretation deines Kodes, tut dieser noch nicht genau das, was ich als Anforderung definiert hatte. Z. B. in function get_cats_texts($cat = 'A')
– woher kommt dieses ‘A’? In meinem switch-Beispiel müsste ‘Text A’ ausgegeben werden, falls kein anderer vorhergehender Fall erfüllt wäre, deshalb steht der als default.
Die Variable $cat, welche an switch übergeben werden müsste, wäre $cat = Kategoriename der Artikelliste oder (deshalb ||) Kategoriename des einzelnen Artikels
.
In meinen Überlegungen vom Anfang ging ich von folgender Erklärung im Textbook zu <txp:php>
aus:
Note that all TXP tags have an equivalent programmatic name which is exactly the same as its tag name. e.g. <txp:recent_articles /> is recent_articles().
Also note that you must pass an array to all tag functions, even if there are no attributes to set. For tags that require no attributes or those that you do not wish to modify the defaults, pass an empty array, viz: category1(array());
Aus diesem Grund schrieb ich als gedanklicher Entwurf (if_category(array('name' => '$cat')) || if_article_category(array('name' => '$cat')))
hin.
Du verwendest nun andere Abfragen wie $is_article_list
. Stimmt also die aus dem Textbook zitierte Erklärung nicht?
Wie auch immer …
Folge ich deinem Kode, dann schliesse ich daraus, dass dieser mir für die gewünschte Variable $cat aus mehreren Möglichkeiten sucht, entweder $c, category1 oder category2. Wie wird aber schlussendlich aus einem dieser drei möglichen Ergebnisse das von mir benötigte $cat?
Ich gehe davon aus, dass die von mir anfangs zusammengestellte switch-case-Anweisung für das was ich damit erreichen will richtig ist. Meine Unbekannte ist, wie bekomme ich $cat? $cat sollte der Kategoriename der aktuell gezeigten Artikelliste oder des aktuell gezeigten Artikels sein.
Deine erster Kodeteil tut das, falls ich das richtig verstehe, für die Artikelliste:
if ($is_article_list)
{
global $c;
if (!empty($c))
{
echo get_cats_texts($c);
}
else
{
echo get_cats_texts();
}
}
Gibt also entweder $c oder nichts weiter.
Im zweiten Teil fragst du $thisarticle
ab (ist das der dafür benötigte Ausdruck?). Müssen Kategorie 1 und 2 separat abgefragt werden? Was ich aber überhaupt nicht mehr verstehe, ist, wie eines der Ergebnisse an function get_cats_texts($cat = 'A')
weiter gegeben wird.
Darf ich dich noch im diesbezügliche Erklärungen bitten? Ich weiss, das ist Zeit beanspruchend … ;-)
Vielen Dank jedenfalls für jede Antwort, die mir helfen könnte, die Sache besser zu verstehen!
Offline
Re: [de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
Oha. Das wird ja ein kleiner PHP und Textpattern-Interna-Kurs. Ich versuch es mal am geänderten Code-Besipiel, der kleinere Fehler enthält.
<txp:php>
// als ersten holen wir $is_article_list aus dem Textpattern-Namensraum
global $is_article_list;
// jetzt fragen wir ab, ob es sich um eine Artikel-Liste handelt oder ein Einzelartikel ist
// das ist nichts anderes als <txp:if_article_list />
if ($is_article_list) // wenn es eine Artikelliste ist
{
// hier holen wir die Kategorievariable aus dem Textpattern-Namensraum ab
global $c;
if (!empty($c)) // wenn eine Kategorie vorhanden ist
{
echo get_cats_texts($c); // dann rufe untere Funktion auf und über gib die Kategorie
}
else // wenn keine Kategorie vorhanden ist
{
echo get_cats_texts(); // dann rufe die untere Funktion ohne Variablenübergabe auf
}
}
else // wenn es ein Einzelartikel ist
{
// als erstes holen wir eine Artikelvariable ab, die hier ein Array ist
global $thisarticle;
// jetzt schauen wir nach, ob in diesem Einzelartikel Kategorien vergeben wurden
if (!empty($thisarticle['category1'])) // Wenn Kategorie1 vergeben wurde
{
echo get_cats_texts($thisarticle['category1']); // rufe die untere Funktion auf und übergib die Artikelkategorie
}
elseif (!empty($thisarticle['category2'])) // Wenn Kategorie2 vergeben wurde
{
echo get_cats_texts($thisarticle['category2']); // rufe die untere Funktion auf und übergib die Artikelkategorie
}
else // Wenn keine Kategorie vergeben wurde
{
echo get_cats_texts(); // dann rufe untere Funktion ohne Variablenübergabe auf
}
}
// Wenn die folgende Funktion ohne Variablenübergabe aufgerufen wird,
// dann nimmt die Variable $cat autmatisch den Wert 'A' an
// Das heißt unter case 'A' würde Dein Standardtext stehen
function get_cats_texts($cat = 'A')
{
// das Statement brauch ich ja nicht erklären, denke ich
switch ($cat)
{
case 'A':
$text = 'Text A';
break;
case 'R':
$text = 'Text R';
break;
case 'S':
$text = 'Text S';
break;
case 'T':
$text = 'Text T';
break;
case 'U':
$text = 'Text U';
break;
case 'V':
$text = 'Text V';
break;
default:
break;
}
// jetzt noch alles zurückgeben an den Funktionsaufruf
return $text;
}
</txp:php>
Natürlich kann man das auch anders lösen. So wie Textpattern verschiedene Lösungen kennt, gibt es auch in PHP verschiedene Lösungsansätze.
Digital nomad, sailing the world on a sailboat: 32fthome.com
Offline
#8 2009-10-01 16:11:45
- GugUser
- Member
- From: Quito (Ecuador)
- Registered: 2007-12-16
- Posts: 1,477
Re: [de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
@ trenc
Vielen Dank für deine bisherigen Antworten und den dafür erbrachten Aufwand.
Einige deiner Erklärungen im Kode halfen mir, Zusammenhänge zu verstehen, die ich vorher nicht gesehen hatte, z. B. wie $cat
übergeben wird:
function get_cats_texts($cat = 'A') {
switch ($cat) {
…
}
}
Du gehst die Lösung grundsätzlich anders an, als ich das tat, mit <txp:if_article_list />
(mit einem else, welches angibt, was passieren soll wenn <txp:if_individual_article />
zutreffen würde). Ich hatte im Laufe meiner Versuche auch an einen solchen Ansatz mit TxP-Tags gedacht, fand dazu aber keine Lösung, wie ich die für die gezeigte Artikelliste oder den gezeigten Einzelartikel aktuelle Kategorie abfragen könnte, … weil, <txp:category />
funktioniert offenbar nur, wenn tatsächlich eine Kategorie angezeigt wird (d. h., die Kategorie in der URL sichtbar ist).
Du verwendest in deinem Ansatz $is_article_list
, erwähnst dabei, dass das dem “Textpattern-Namensraum” angehöre. Diese Bemerkung verwirrt mich, weil ich, wie oben schon zitiert, im Textbook anderes gelesen hatte, nämlich, dass jeder TxP-Tag seine Entsprechung in PHP habe, nach dem Schema, aus <txp:recent_articles />
wird recent_articles()
(aus Textbook zitierter Beispiel-Tag).
Meine Verwirrung erinnert mich an einen vor einigen Tagen im englischsprachigen TxP-Forum diskutierten Beitrag, in welchem sich ein(e) sarah beklagte, es gäbe keine guten Anleitungen zu Textpattern. Ich teile diese Meinung zwar nicht in jener Art, konnte aber z. B. zu dem von dir erwähnten “Textpattern-Namensraum” per Google, ausser diesem Forumsbeitrag, nichts finden, das mich weiter gebracht hätte.
Ich will deinen Kode keinesfalls in Frage stellen, im Sinne, dass ich es besser wüsste. Immerhin hast du TxP-Plug-Ins geschrieben, etwas, zudem ich mit meinen Kenntnissen nicht fähig wäre. Du wirst also schon wissen, aus welchem Grund du $is_article_list
verwendest und nicht if_article_list()
, wie ich es gemäss der Angaben im Textbook gemacht hätte …
Tatsache ist allerdings, dass dein Kode, so wie ich ihn an meine realen Umstände anpasste, nicht funktioniert. Warum, das ist mir nicht klar. Dort, wo der gewünschte Text ausgegeben werden sollte, erscheint eine Fehlermeldung:
<br />
<b>Parse error</b>: parse error, unexpected '}', expecting ',' or ';' in <b>[von mir gelöschter Teil des Pfades]/textpattern/publish/taghandlers.php(3127) : eval()'d code</b> on line <b>52</b><br />
Bevor ich den eingefügten PHP-Kode zeige, hier noch einmal – lesbarer als weiter oben unter #4 – die gegenwärtig funktionierende Lösung mit TxP-Tags:
Nachtrag: Dafür gibt es unterdessen eine elegantere Lösung
<txp:variable name="R" value="Text R" />
<txp:variable name="S" value="Text S" />
<txp:variable name="T" value="Text T" />
<txp:variable name="U" value="Text U" />
<txp:variable name="V" value="Text V" />
<txp:variable name="A" value="Text A" />
<txp:if_category name="R"><txp:variable name="R" /><txp:else />
<txp:if_article_category name="R"><txp:variable name="R" /><txp:else />
<txp:if_category name="S"><txp:variable name="S" /><txp:else />
<txp:if_article_category name="S"><txp:variable name="S" /><txp:else />
<txp:if_category name="T"><txp:variable name="T" /><txp:else />
<txp:if_article_category name="T"><txp:variable name="T" /><txp:else />
<txp:if_category name="U"><txp:variable name="U" /><txp:else />
<txp:if_article_category name="U"><txp:variable name="U" /><txp:else />
<txp:if_category name="V"><txp:variable name="V" /><txp:else />
<txp:if_article_category name="V"><txp:variable name="V" /><txp:else />
<txp:variable name="A />
</txp:if_category></txp:if_article_category></txp:if_category></txp:if_article_category></txp:if_category></txp:if_article_category></txp:if_category></txp:if_article_category></txp:if_category></txp:if_article_category>
Genau das dachte ich per PHP kürzer und vor allem übersichtlicher (mir scheint die switch-case-Anweisung sehr übersichtlich zu sein) umsetzen zu können. Hier also, wie ich deinen Kode anpasste:
<txp:php>
global $is_article_list;
if ($is_article_list) {
global $c;
if (!empty($c)) {
echo get_cats_texts($c);
}
else {
echo get_cats_texts();
}
}
else {
global $thisarticle;
if (!empty($thisarticle["category1"])) {
echo get_cats_texts($thisarticle["category1"]);
}
elseif (!empty($thisarticle["category2"])) {
echo get_cats_texts($thisarticle["category2"]);
}
else {
echo get_cats_texts();
}
}
function get_cats_texts($cat = "A") {
switch ($cat) {
case "A":
$texto = "Text A";
break;
case "R":
$texto = "Text R";
break;
case "S":
$texto = "Text S";
break;
case "T":
$texto = "Text T";
break;
case "U":
$texto = "Text U";
break;
case "V":
$texto = "Text V";
break;
default:
break;
}
echo $texto
}
</txp:php>
Vielleicht habe ich unbemerkt einen Fehler eingebaut, keine Ahnung, aber es funktioniert nicht. Zudem verunsichern mich einige Teile deines ursprünglichen Kodes. Z. B.:
else
{
echo get_cats_texts(); // dann rufe die untere Funktion ohne Variablenübergabe auf
}
Kann die switch-case-Anweisung ohne Variablenübergabe überhaupt funktionieren?
Oder: Warum Fall “A” nicht als default angeben, so wie das in meinem switch-Schnippsel weiter oben stand?
Ich weiss allerdings auch nicht, wo die einfachen Gänsefüsschen eventuell falsch sein könnten (wie ich las, soll PHP teilweise normale und einfache Gänsefüsschen anders interpretieren). Deshalb setzte ich versuchsweise alle Gänsefüsschen als normale (“).
Schlussfolgerung
Oder mögliche Schlussfolgerung: Soll ich’s sein lassen? Die Angelegenheit hat sich zu einem Monster entwickelt, und eine funktionierende Lösung habe ich ja.
Anderseits fände ich es interessant, zu den hier angesprochenen Unsicherheiten Antworten zu finden. Alles was wir tun, sind auch Lernprozesse …
Ich warte mal ab, was auf diesen Beitrag weiter passiert.
Last edited by GugUser (2009-10-03 03:27:01)
Offline
Re: [de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
Du verwendest in deinem Ansatz $is_article_list, erwähnst dabei, dass das dem “Textpattern-Namensraum” angehöre. Diese Bemerkung verwirrt mich, weil ich, wie oben schon zitiert, im Textbook anderes gelesen hatte, nämlich, dass jeder TxP-Tag seine Entsprechung in PHP habe, nach dem Schema, aus <txp:recent_articles /> wird recent_articles() (aus Textbook zitierter Beispiel-Tag).
Meine Verwirrung erinnert mich an einen vor einigen Tagen im englischsprachigen TxP-Forum diskutierten Beitrag, in welchem sich ein(e) sarah beklagte, es gäbe keine guten Anleitungen zu Textpattern. Ich teile diese Meinung zwar nicht in jener Art, konnte aber z. B. zu dem von dir erwähnten “Textpattern-Namensraum” per Google, ausser diesem Forumsbeitrag, nichts finden, das mich weiter gebracht hätte.
Das ist mein Fehler, weil das eigentlich kein Namesraum ist. Der Begriff ist schon anders besetzt. Ich habe diesen nur gewählt, weil mir kein besserer eingefallen ist. Es handelt sich dabei nur um Variablen, die Textpattern verwendet und die wir hier nur mittels global
für unsere Funktion verfügbar machen. Ich muss zur Entschuldigung sagen, dass ich kein Programmierer bin, sondern Historiker. :)
Das, was das Textbook sagt, ist schon richtig. Die Textpattern-Funktion für <txp:if_article_list />
sieht so aus:
function if_article_list($atts, $thing)
{
global $is_article_list;
return parse(EvalElse($thing, ($is_article_list == true)));
}
Aber wie Du (eventuell) siehst, prüft diese Funktion auch das Vorhandensein der Variable $is_article_list
und parst zusätzlich noch den Teil der zwischen <txp:if_article_list>
und </txp:if_article_list>
steht.
Ich habe das Ganze einfach nur abgekürzt und prüfe gleich auf die Variable $is_article_list
.
Kann die switch-case-Anweisung ohne Variablenübergabe überhaupt funktionieren?
Ja, denn $cat ist vorbelegt mit ‘A’ bzw in dem neuen Beipiel — siehe unten — mit ‘’, also leer.
Oder: Warum Fall “A” nicht als default angeben, so wie das in meinem switch-Schnippsel weiter oben stand?
Hab ich damit gemacht,siehe unten. Ist wohl die bessere Lösung.
Müssen Kategorie 1 und 2 separat abgefragt werden?
Müssen nicht. Wenn Du nur eine Ausgabe willst, kannst Du das auch in eine gemeinsame Abfrage mir or
packen. Das kommt ganz darauf an, wie Du die Artikelkategorien verwendest.
Was ich aber überhaupt nicht mehr verstehe, ist, wie eines der Ergebnisse an function get_cats_texts($cat = ‘A’) weiter gegeben wird.
Das Ergebnis, also z.B. $thisarticle['category1']
, was die Kategorie1 des aktuellen Artikels wäre, wird mit get_cats_texts($thisarticle['category1'])
an de Funktion weitergereicht.
Ich hab den Code noch etwas umgeändert und getestet, so funktioniert er:
<txp:php>global $is_article_list; // muss gleich ohne Zeilenumbruch oder Leerzeichen nach dem <txp:php> stehen
if ($is_article_list)
{
global $c;
if (!empty($c))
{
echo get_cats_texts($c);
}
else
{
echo get_cats_texts();
}
}
else
{
global $thisarticle;
if (!empty($thisarticle['category1']))
{
echo get_cats_texts($thisarticle['category1']);
}
elseif (!empty($thisarticle['category2']))
{
echo get_cats_texts($thisarticle['category2']);
}
else
{
echo get_cats_texts();
}
}
function get_cats_texts($cat = '') // geändert auf leeren String
{
// den default 'A' hab ich jetzt weggelassen, das machen wir jetzt unten über das default
switch ($cat)
{
case 'R':
$text = 'Text R';
break;
case 'S':
$text = 'Text S';
break;
case 'T':
$text = 'Text T';
break;
case 'U':
$text = 'Text U';
break;
case 'V':
$text = 'Text V';
break;
default:
$text = 'Text A';
break;
}
return $text; // wichtig: Es muss ein return, kein echo sein. Wir wollen hier nur etwas zurückgeben, noch nichts ausgeben. Und das Semikolon am Ende nicht vergessen
}</txp:php>
Digital nomad, sailing the world on a sailboat: 32fthome.com
Offline
#10 2009-10-02 16:20:22
- GugUser
- Member
- From: Quito (Ecuador)
- Registered: 2007-12-16
- Posts: 1,477
Re: [de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
@ trenc
Ich hab den Code noch etwas umgeändert und getestet, so funktioniert er …
Es ist mir etwas peinlich, noch einmal über diese Sache zu schreiben, aber, bei mir funktioniert das nicht. Ich bekomme folgende Fehlermeldung:
Fatal error: Cannot redeclare get_cats_texts() (previously declared in [von mir gelöschter Teil der URL]/textpattern/publish/taghandlers.php(3127) : eval()'d code:27) in [von mir gelöschter Teil der URL]/textpattern/publish/taghandlers.php(3127) : eval()'d code on line 27
Seit gestern habe ich mehrere Variationen des PHP-Kodes durchdacht und ausprobiert, aber, das Beste was ich erreiche, ist, dass keine Fehlermeldung kommt und kein Text ausgegeben wird … :-(
Es muss irgendwo ein Überlegungsfehler drinnen sitzen …
Offline
Re: [de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
Cannot redeclare get_cats_texts()
Du hast den Code wahrscheinlich zwei oder mehrmals irgendwo stehen.
Digital nomad, sailing the world on a sailboat: 32fthome.com
Offline
#12 2009-10-03 00:54:58
- GugUser
- Member
- From: Quito (Ecuador)
- Registered: 2007-12-16
- Posts: 1,477
Re: [de-de] [nicht mehr aktuell] Wie werden TxP-Tags in PHP verwendet?
@ trenc
Du hast den Code wahrscheinlich zwei oder mehrmals irgendwo stehen.
Nein …
Offline