Funktionsforensiker vor

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Funktionsforensiker vor

Post by yellowled »

Ein Kundenprojekt, für das ich vor 3 (ja, drei) Jahren ein sehr angepasstes Theme umgesetzt habe, soll in naher Zukunft live gehen. In diesem Projekt gibt es u.A. eine Custom-Funktion, deren PHP darauf schließen lässt, dass ich sie nicht selbst erfunden habe (Garvin?). Diese Funktion wird in der config.inc.php wie folgt definiert:

Code: Select all

function smarty_show_tags($params, &$smarty) {
    global $serendipity;
    $o = $serendipity['GET']['tag'];
    $serendipity['GET']['tag'] = $params['tag'];
    $e = serendipity_smarty_fetchPrintEntries($params, $smarty);
    echo $e;
    if (!empty($o)) {
        $serendipity['GET']['tag'] = $o;
    } else {
        unset($serendipity['GET']['tag']);
    }
    //print_r($params);
}
$serendipity['smarty']->register_function('show_tags', 'smarty_show_tags');
und dann in einem Template für statische Seiten wie folgt aufgerufen:

Code: Select all

{show_tags tag=$staticpage_custom.relTags template="related_articles.tpl" limit=$staticpage_custom.relNumb noSticky="true"}
Sprich: Es gibt einen eigenen Seitentyp statische Seiten mit dazugehörigem Template und Backend-Template. Auf diesen Seiten kann ein „related Tag“ angegeben werden. Über obige Funktion werden dann auf diesen statischen Seiten Einträge, die mit dem besagten Tag (bzw. mehreren Tags) verschlagwortet sind, als Liste ausgegeben.

Diese Funktion erzeugt laut Kunde (das Testsystem ist hier nicht so ganz einfach „mal eben“ zu reproduzieren, daher habe ich kein eigenes) – vermutlich seit Version 1.7 – keine Ausgabe mehr. Es hat aber „früher“ (was aufgrund der Projektlaufzeit archaische Versionen wie z.B. 1.4 bedeuten kann) funktioniert. Natürlich wäre denkbar, dass das Problem mit einer der folgenden Ursachen zusammenhängt:

* Änderungen am Kern
* Änderungen am Freetag-Plugin
* Änderungen am Plugin Statische Seiten
* vom Kunden falsch eingerichtet

Letzteres kann ich derzeit nicht überprüfen, da es aus diversen Gründen nicht ohne weiteres möglich ist, mir Backendzugang zum Testsystem zu geben.

Frage: Sieht/weiß jemand spontan Probleme mit obiger Funktion, deren Aufruf oder den beteiligten Plugins, die dazu führen könnten, dass die Ausgabe scheitert?

YL
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Funktionsforensiker vor

Post by garvinhicking »

Hey,

also ich schätze das es am ehesten mit der Übertragung der Variablen zu tun haben könnte.

Erster Ansatz ist den Code mal so abzuändern:

Code: Select all

function smarty_show_tags($params, &$smarty) {
    global $serendipity;
    echo "<!-- SMARTY SHOW CALL: " . htmlspecialchars(serialize($params)) . " -->\n";
    $o = $serendipity['GET']['tag'];
    echo "<!-- Preserving original tag: " . htmlspecialchars($o) . " -->\n";
    $serendipity['GET']['tag'] = $params['tag'];
    echo "<!-- Filter by tag: " . htmlspecialchars($serendipity['GET']['tag']) . " -->\n";
    $e = serendipity_smarty_fetchPrintEntries($params, $smarty);
    echo "<!-- TPL output start... -->\n";
    echo $e;
    echo "<!-- TPL output end... -->\n";
    if (!empty($o)) {
        $serendipity['GET']['tag'] = $o;
    } else {
        unset($serendipity['GET']['tag']);
    }
    //print_r($params);
}
$serendipity['smarty']->register_function('show_tags', 'smarty_show_tags');
[/code]

Im Template den Code nochmal so anpassen:

Code: Select all

<!-- SHOW TAGS function call. Custom vars:
{$staticpage_custom|@print_r} -->
{show_tags tag=$staticpage_custom.relTags template="related_articles.tpl" limit=$staticpage_custom.relNumb noSticky="true"}
Mein persönlicher Tipp: $staticpage_custom funktioniert nicht mehr, entweder weils vom Staticpage-Plugin nicht mehr durchgereicht wird (Ian, Ideen?) oder weil es durch ein Smarty-Update evtl nicht mit globalem Scope zugewiesen wird/aufrufbar ist.

VG,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Funktionsforensiker vor

Post by yellowled »

Einstweilen danke für's mitdenken. :)
garvinhicking wrote:Mein persönlicher Tipp: $staticpage_custom funktioniert nicht mehr, entweder weils vom Staticpage-Plugin nicht mehr durchgereicht wird (Ian, Ideen?) oder weil es durch ein Smarty-Update evtl nicht mit globalem Scope zugewiesen wird/aufrufbar ist.
Oh, Shit. Smarty-Update hatte ich überhaupt nicht auf dem Schirm, da klingt aber verdächtig richtig. Ich weiß nicht mehr, wann die Umstellung auf Smarty 3 genau war, aber es ist sehr wahrscheinlich, dass der besagte Code für Smarty 2 gedacht war (wenn ich richtig informiert bin, war 1.4 noch aktuell, als dieses Theme geschrieben wurde :roll:).

Ich warte mal ab, was Ian ggf. dazu sagen kann.

YL
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: Funktionsforensiker vor

Post by Timbalu »

garvinhicking wrote:Mein persönlicher Tipp: $staticpage_custom funktioniert nicht mehr, entweder weils vom Staticpage-Plugin nicht mehr durchgereicht wird (Ian, Ideen?) oder weil es durch ein Smarty-Update evtl nicht mit globalem Scope zugewiesen wird/aufrufbar ist.
Kann sehr gut sein. Wo genau sitzt denn dieser {show_tags ..} call?
yellowled wrote:Ich weiß nicht mehr, wann die Umstellung auf Smarty 3 genau war
Smarty 3 kam mit S9y 1.7.

Ich kann mir so auf die Schnelle nicht wirklich etwas darunter vorstellen, was wie wo genau gemacht wird, woher die Daten stammen etc, damit man das wenigstens mal ansatzweise nachbilden kann.
Regards,
Ian

Serendipity Styx Edition and additional_plugins @ https://ophian.github.io/ @ https://github.com/ophian
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Funktionsforensiker vor

Post by yellowled »

Timbalu wrote:Kann sehr gut sein. Wo genau sitzt denn dieser {show_tags ..} call?
Am Ende einer Template-Datei für einen eigenen Typ statische Seite, die ein eigenes Template hat, das man dem Seitentyp beim anlegen mitgibt (unter „Seitentypen bearbeiten“ bei den statischen Seiten).
Timbalu wrote:Ich kann mir so auf die Schnelle nicht wirklich etwas darunter vorstellen, was wie wo genau gemacht wird, woher die Daten stammen etc, damit man das wenigstens mal ansatzweise nachbilden kann.
Ja, das ist das große Elend dieser ganzen Sache – ich hab's (mit Garvin's Code-Hilfe) vor drei Jahren (laut meiner Auftragsbuchhaltung) umgesetzt. Damals™ – in welcher Version auch immer, definitiv nicht 1.7 – wird es funktioniert haben, aber natürlich habe ich dafür keine Testinstanz mehr. Es gibt eine Testinstanz beim Kunden, an die man aber (insbesondere ans Backend) aus Sicherheitsgründen von remote nicht so ohne weiteres ran kommt.

Da das ganze System einigermaßen komplex ist, kann ich es auch nicht mal eben zwischen Tür und Angel selbst nachbauen … aber ich denke, wir versuchen's mal mit Garvin's Code von oben.

YL
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Funktionsforensiker vor

Post by yellowled »

Hm. Ich greppte gerade mal über die Theme-Dateien, um sicherzugehen, dass show_tags nur an der einen Stelle aufgerufen wird. Stellt sich raus, dass die Funktion in der index.tpl nochmal verwendet wird, um eine News-Übersicht auf der Startseite zu erzeugen.

Code: Select all

{show_tags tag=$template_option.newsTag template="news_articles.tpl" limit=$template_option.newsAnz noSticky="true"}
Gleicher Aufruf, aber die Werte stammen aus einer Theme-Option statt einer Option des neuen Typs statische Seite. Bei diesem Aufruf funktioniert die Ausgabe … (muss vermutlich nix heißen, aber ich wollt's erwähnt haben).

YL
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Funktionsforensiker vor

Post by garvinhicking »

Das spricht sehr für meine Vermutung, dass staticpage scheinbar die custom config variablen nicht mehr zuweist...
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Funktionsforensiker vor

Post by yellowled »

garvinhicking wrote:Das spricht sehr für meine Vermutung, dass staticpage scheinbar die custom config variablen nicht mehr zuweist...
Ich schick denen heute Deinen Code. Wenn ich das richtig sehe, beinhaltet der Debug-Ausgabe in Kommentaren. Gucken wir mal, was dabei rauskommt.

YL
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: Funktionsforensiker vor

Post by Timbalu »

Ich habe gerade auch für sp dev ein persönliches Interesse daran das grundlegender zu verstehen. Wenn Garvin das nochmal nachvollziehbar aufschlüsseln könnte, wäre ich sehr froh darüber.
Inwieweit das im Zusmmenhang steht, kann ich nicht sagen, aber die beiden serendipity[plugin][custom][sidebars] und serendipity[plugin][custom][css_class] funktionieren über ein staticpage backend form, so dass man später in der index.tpl darauf zugreifen kann. (Soweit ich mich erinnere.)
Regards,
Ian

Serendipity Styx Edition and additional_plugins @ https://ophian.github.io/ @ https://github.com/ophian
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Funktionsforensiker vor

Post by garvinhicking »

Timbalu wrote:Ich habe gerade auch für sp dev ein persönliches Interesse daran das grundlegender zu verstehen. Wenn Garvin das nochmal nachvollziehbar aufschlüsseln könnte, wäre ich sehr froh darüber.
Inwieweit das im Zusmmenhang steht, kann ich nicht sagen, aber die beiden serendipity[plugin][custom][sidebars] und serendipity[plugin][custom][css_class] funktionieren über ein staticpage backend form, so dass man später in der index.tpl darauf zugreifen kann. (Soweit ich mich erinnere.)
Das relevante wäre, auf die Custom-Variablen innerhalb der staticpage_XXX.tpl Datei zuzugreifen, nicht der index.tpl von Serendipity - so wie ich es verstanden habe...?
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Funktionsforensiker vor

Post by yellowled »

Faszinierend.

Der Code von Garvin ist jetzt in der Testseite beim Kunden, es passiert folgendes:

* In der Frontendansicht erzeugen entsprechende Seiten nun überhaupt keine Ausgabe, auch keinen Debug-Code. Das allein lässt mich daran zweifeln, dass dieser neue Typ statische Seite dort backendseitig überhaupt korrekt eingerichtet wurde.
* Stattdessen wird beim Kunden im Backend (auf das ich nach wie vor keinen Zugriff habe) anstelle des Formulars für den Custom-Typ statische Seite jetzt eine Artikelliste ausgegeben?!

Ich ahne, dass wir dort so nicht weiter kommen und habe daher Backend-Zuriff erfragt (weiß aber nicht, ob das ohne einen Vor-Ort-Termin dort möglich ist; man ist dort sehr auf Sicherheit bedacht).

YL
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Funktionsforensiker vor

Post by yellowled »

yellowled wrote:Ich ahne, dass wir dort so nicht weiter kommen und habe daher Backend-Zuriff erfragt (weiß aber nicht, ob das ohne einen Vor-Ort-Termin dort möglich ist; man ist dort sehr auf Sicherheit bedacht).
Tscha. Es ging dann doch mit dem Backend-Zugriff von remote. Und, was soll ich sagen? Es lag nur an den Einstellungen beim Anlegen dieses Custom-Typs statische Seite. 3 Minuten im Backend die richtigen Dinge tun, eine .tpl-Datei an die richtige Stelle legen und zack, alles, wie es sein soll.

Ich danke Euch sehr für's mitdenken, aber der 3 Jahre alte Code funktioniert nach wie vor, die Variablen werden sauber durchgereicht, wir haben keinen Bug. :)

YL
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: Funktionsforensiker vor

Post by Timbalu »

Eigentlich schade...! :)
Ich hätte gerne gewusst wie ich das für sp dev genauer überprüfen könnte und so aus diesem Halbdunkel hervorhole. Aber dazu müsste ich erstmal genau verstehen wie das genau und wofür gemacht ist/war.
Regards,
Ian

Serendipity Styx Edition and additional_plugins @ https://ophian.github.io/ @ https://github.com/ophian
yellowled
Regular
Posts: 7111
Joined: Fri Jan 13, 2006 11:46 am
Location: Eutin, Germany
Contact:

Re: Funktionsforensiker vor

Post by yellowled »

Timbalu wrote:Aber dazu müsste ich erstmal genau verstehen wie das genau und wofür gemacht ist/war.
Ich weiß nicht genau, ob ich verstehe, was Du verstehen möchtest.

Sinn und Zweck dieser Funktion ist es im Grunde nur, auf einer statischen Seite eine Liste von Artikeln auszugeben, denen eines oder mehrere (ODER-verknüpfte) Tags zugewiesen sind. Also z.B. „zeige am Ende dieser statischen Seite 5 Artikel, die die Tags »apfel« oder »birne« haben“. Bei den Artikeln passiert da nichts besonderes, ihnen werden halt Tags zugewiesen.

Um das für statische Seiten umzusetzen, gibt es einen eigenen Seitentyp, der ein eigenes Backend-Template (für statische Seiten hat), damit in der Eingabemaske a) die Anzahl der auszugebenden Artikel und b) die ODER-verknüpften Tags eingegeben werden können.

Die Funktion show_tags (das sollte eigentlich Garvin erklären, ich verstehe den Code nicht) dient meines Wissens dazu, die entsprechenden Artikel anhand der übergebenen Variablen zu finden.

YL
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: Funktionsforensiker vor

Post by Timbalu »

Ja schon. So ähnlich wie für related categories. Mir fehlt halt einfach das input bzw dieser Seitentyp zum rumspielen. Den hast du nicht zufällig noch?
Regards,
Ian

Serendipity Styx Edition and additional_plugins @ https://ophian.github.io/ @ https://github.com/ophian
Post Reply