Page 1 of 2
[gelöst] Template - Verzeichnis einlesen
Posted: Mon Jul 29, 2013 9:51 pm
by reinhardl
hallo,
ursprünglich war meine Idee folgende:
ich definiere über erweiterte Erweiterte
Eigenschaften von Artikeln einen Variable
GalleryPath. Über diese Variable möchte ich ein Unterverzeichnis von /upload für einen bestimmten Eintrag in das Array $filelist einlesen. Aus dem Inhaltsverzeichnis werden die
serendipityThumb. Dateien gefiltert und es bleiben nur die Mediendateien, aus denen ich in einer .TPL Datei eine Bildergallerie erstelle.
TPL Datei:
Code: Select all
{foreach from=$filelist item="file" }
<tr>
<td>
<img src="{$file}" alt="{$entry.properties.ep_MimboImageAlt}" /> </td>
</tr>
{/foreach}
Wenn das funktioniert soll dann mit
jQuery Wookmark eine dynamische Gallerie generiert werden.
Testweise hatte ich einmal folgenden Code in der
config.inc.php eingebaut, der auch funktioniert.
Code: Select all
if ($dir = @opendir("uploads/Suedafrika/Kapstadt/Kap-Halbinsel/")) {
while (($file = readdir($dir)) !== false){
if($file != ".." && $file != "." && strpos($file,"serendipityThumb.")==false){ $filelist[] = $file; }
}
closedir($dir);
}
asort($filelist);
$serendipity['smarty']->assign_by_ref('filelist', $filelist);
Aber sehe ich das richtig, dass
$entry.properties.ep_MimboImageAlt in der config.inc.php nicht zur Verfügung steht?
Muss man das in ein Plugin unterbringen oder ??? Ich stehe da irgendwie im Wald und sehe den Baum vor lauter Bäumen nicht ...
jemand eine Idee?
Danke
Re: Template - Verzeichnis einlesen
Posted: Tue Jul 30, 2013 9:47 am
by Timbalu
Eigentlich doch...
Probiere doch mal das hier:
Code: Select all
$eventData['properties']['ep_MimboImageAlt']
oder
Code: Select all
print_r($eventData['properties']);
um sich alles überlieferte auszugeben.
oder
Code: Select all
serendipity_plugin_api::hook_event('frontend_display', $entry);
mit folgendem Zugriff auf das $entry array...
Vielleicht muss man das auch mit "faked plugins" verbinden, um darauf Zugriff zu bekommen... da bin gerade auf die Schnelle überfragt, ansonsten hier ein Beispiel:
https://github.com/s9y/additional_theme ... c.php#L114
Re: Template - Verzeichnis einlesen
Posted: Tue Jul 30, 2013 1:38 pm
by garvinhicking
Hi!
Timbalu - reinhard ruft ja das ganze über readdir() auf. Da gibt es gar kein $Properties! Ich fürchte daher dein Tip führt da etwas ins Leere.
Die $properties kommen erst aus dem s9y code. Du, Reinhard, müsstest also in der config.inc.php auf die dedizierten Serendipity_Funktionen der include/functions_images.inc.php zugreifen, konkret serendipity_fetchImagesFromDatabase() bzw. serendipity_fetchImages(). Das liest dann auch die Datenbank aus. Du kannst mit print_r() auf dem Ergebnis dieser Funktion dir anschauen wie das Array aufgebaut ist.
Viele Grüße,
Garvin
Re: Template - Verzeichnis einlesen
Posted: Tue Jul 30, 2013 2:27 pm
by Timbalu
Ak ok. Ich wollte keine Verwirrung stiften!
Ich dachte nur, weil er ja schon in der config.inc arbeitet, dass dort irgendwie doch auch auf den $eventData stream zugegriffen werden könnte...
Re: Template - Verzeichnis einlesen
Posted: Tue Jul 30, 2013 4:08 pm
by reinhardl
garvinhicking wrote: Du, Reinhard, müsstest also in der config.inc.php auf die dedizierten Serendipity_Funktionen der include/functions_images.inc.php zugreifen, konkret serendipity_fetchImagesFromDatabase() bzw. serendipity_fetchImages(). Das liest dann auch die Datenbank aus. Du kannst mit print_r() auf dem Ergebnis dieser Funktion dir anschauen wie das Array aufgebaut ist.
Hallo Garvin,
bedeutet das, dass ich readdir($dir) in der config.inc.php ganz lassen soll?
Eigentlich wollte ich ja "nur" den Inhalt eines Verzeichnisses in der config.inc.php auslesen, welches ich bei {$entry.properties.ep_GalleryPath} pro Eintrag festlege und dann im Template zu einer Galerie zusammensetze.
Mit meinem rudimentären php-Wissen komme ich da wohl nicht weiter...

Re: Template - Verzeichnis einlesen
Posted: Tue Jul 30, 2013 7:54 pm
by reinhardl
und nochmal ..
wäre Timbalus Idee dieses mittels "faked plugins" zu lösen nicht ein guter Ansatz? Oder kann man damit nur boolsche Varablen speichern?
Re: Template - Verzeichnis einlesen
Posted: Wed Jul 31, 2013 9:25 am
by garvinhicking
Hi Reinhard!
Das was Timbalu vorschlägt wäre ein eigenes Eventplugin in der config.inc.php zu programmieren. Das wäre schon schwieriger, und auch eigentlich unnötiger Overhead.
Jetzt wo Du das aber nochmal schreibst sehe ich, dass Du tatsächlich etwas anderes willst als ich ursprünglich schrieb. Ich dachte Du wolltest Mediendatei-Properties aufrufen.
Wofür genau willst Du $entry.properties.ep_MimboImageAlt denn in der config.inc.php nutzen? Eigentlich müsstest Du die Variable doch nur im Template nutzen, gar nicht in der config.inc.php? Wenn Du das wollen würdest, müsste deine config.inc.php über $serendipity['smarty']->registerModifier oder registerFunction eine eigene PHP-Funktion registrieren, die als Parameter $entry.properties reinbekommt, so in der Art:
Code: Select all
function serendipity_meinBild($alt) {
if ($dir = @opendir("uploads/Suedafrika/Kapstadt/Kap-Halbinsel/")) {
while (($file = readdir($dir)) !== false){
if($file != ".." && $file != "." && strpos($file,"serendipityThumb.")==false){
$filelist[] = $file;
}
}
closedir($dir);
asort($filelist);
foreach($filelist AS $file) {
echo '<tr><td><img src="' . $file . '" alt="' . $alt . '" /></td></tr>';
}
}
$serendipity['smarty']->register_modifier('serendipity_meinBild', 'serendipity_meinBild');
und in der tpl datei dann:
Code: Select all
{$entry.properties.ep_MimboImageAlt|@serendipity_meinBild}
Aber eigentlich ist deine Version da schon die bessere; Du musst den TPL-Schnippsel da einfügen, wo {$entry} verfügbar ist natürlich (also im entries.tpl loop)...
Grüße,
Garvin
Re: Template - Verzeichnis einlesen
Posted: Wed Jul 31, 2013 9:51 am
by Timbalu
Und wenn schon dann bitte auch mit neuer Syntax, denn wir sind ja schließlich im Smarty 3 Land...
http://www.smarty.net/docs/en/advanced. ... dp19215136
http://www.smarty.net/docs/en/api.register.plugin.tpl
Beispiele:
Code: Select all
function serendipity_smarty_meinBild($alt) { .... }
Code: Select all
$serendipity['smarty']->registerPlugin('modifier', 'serendipity_meinBild', 'serendipity_smarty_meinBild');
oder
Code: Select all
$serendipity['smarty']->registerPlugin('function', 'serendipity_meinBild', 'serendipity_smarty_meinBild');
etc
Der function name hat natürlich nix mit der Smarty syntax zu tun, sondern dient lediglich der Unterscheidung zwischen function und Ausführung, so wie es Serendipity im Kern überall vormacht. (Ich fände es gut wenn man sich gleich daran hielte und man könnte das sogar noch verfeinern, wenn man es function template_smarty_foobar nennen würde)
Re: Template - Verzeichnis einlesen
Posted: Wed Jul 31, 2013 6:25 pm
by reinhardl
garvinhicking wrote:....
Wofür genau willst Du $entry.properties.ep_MimboImageAlt denn in der config.inc.php nutzen? Eigentlich müsstest Du die Variable doch nur im Template nutzen, gar nicht in der config.inc.php? Wenn Du das wollen würdest, müsste deine config.inc.php über $serendipity['smarty']->registerModifier oder registerFunction eine eigene PHP-Funktion registrieren, die als Parameter $entry.properties reinbekommt
Also ich möchte das handling von Bildern vereinfachen:
-
$entry.properties.ep_MimboImageAlt bekommt einen Pfad z.B. /upload/Laos
- in der
config.inc.php wird das Inhaltsverzeichnis vom Pfad
$entry.properties.ep_MimboImageAlt in das array
$filelist eingelesen
- das Template soll dann wenn
$entry.properties.ep_MimboImageAlt <> '' in der Tpl-Datei mit Hilfe von jquery bzw dem Wookmark plugin aus
$filelist eine Fotogalerie generieren.
So müsste man nur die Fotos, die man in einem Eintrag in Galerieform ausgeben möchte, in ein Unterverzeichnis der Mediengallerie laden und anschließend den Pfad über $entry.properties.ep_MimboImageAlt bekannt machen.
Ich werde mal mit Deinen Hinweisen etwas experimentieren.
eigentlich müsste doch nur
Code: Select all
function serendipity_meinBild($alt) {
if ($dir = @opendir("uploads/Suedafrika/Kapstadt/Kap-Halbinsel/")) { ...
in
Code: Select all
function serendipity_meinBild($alt) {
if ($dir = @opendir($alt)) {
geändert werden oder?
Grüße
Reinhard
Re: Template - Verzeichnis einlesen
Posted: Thu Aug 01, 2013 10:17 am
by reinhardl
Also, der Code so wie folgt funktioniert soweit
in config.inc.php kommt:
Code: Select all
function serendipity_smarty_meinBild($alt) {
if ($dir = @opendir($alt)) {echo '</br>Schleife in config.inc.php:</br>';
while (($file = readdir($dir)) !== false){
if($file != ".." && $file != "." && strpos($file,"serendipityThumb.")==false)
{echo $file.'<br/>'; $filelist[] = $file; }
}
closedir($dir);
asort($filelist);
}
echo 'Ende Schleife in erendipity_smarty_meinBild($alt)';
}
$serendipity['smarty']->registerPlugin('modifier', 'serendipity_meinBild', 'serendipity_smarty_meinBild');
und in der entries.tpl
Code: Select all
{foreach from=$entries item="dategroup"}
{foreach from=$dategroup.entries item="entry"}
{assign var="entry" value=$entry scope=parent}
{assign var="comment" value=$comment scope=parent}
{$entry.properties.ep_ep_GalleryPath|@serendipity_meinBild}
....
Beispiel (nur die unformatierte Ausgabe w.o.)
Allerdings gebe ich in config.inc.php die Dateinamen mittels echo aus. Das Array $filelist wird nicht genutzt, aber anscheinend auch nicht an smarty übergeben.
Ich habe auch mal versucht
$serendipity['smarty']->assign_by_ref('filelist', $filelist); am Ende der Funktion function serendipity_smarty_meinBild einzufügen, aber das gab aber Fehler.
Gibt es noch eine Möglichkeit $filelist in Smarty verfügbar zu machen damit ich die Formatierung in der Template TPL-Datei machen kann?
Die folgende Schleife in der entries.tpl funktioniert
nicht:
Code: Select all
{foreach from=$filelist item="file" name="foo"}
<tr>
<td> <a href="{$file}" >{$file} </a> </td>
</tr>
{/foreach}
Re: Template - Verzeichnis einlesen
Posted: Thu Aug 01, 2013 12:47 pm
by garvinhicking
Hi!
Leider gerade keine Zeit für konkreten Code, aber: Entweder Du übergibst der config.inc.php function nach $alt auch noch ein &$filelist und rufst es dann via {$bla|@serendipity_filelist:$filelist} auf, und nutzt dnan $fileliste in Smarty (nur beispiele, konkrete namen bitte recherchieren). Oder Du nutzt statt smarty modifier besser eine smarty function, der man dann als Parameter etwas klarer das ganze überträgt, muss dann aber die Functions auch so wie in include/functions_smarty.inc.php formatieren.
Dritter Weg wäre in der ocnfig.inc.php per serendipity_smary_fetch_block() oder so ein eigenes "filelist.tpl" templat ezu überbergen, dann klappt auch der assignbyRef-Aufruf und wäre in filelist.tpl verfügbar.
Grüße,
Garvin
Re: Template - Verzeichnis einlesen
Posted: Mon Aug 05, 2013 9:45 am
by reinhardl
komme noch nicht so richtig weiter
entries.tpl sieht so aus:
Code: Select all
{$entry.properties.ep_GalleryPath|@serendipity_getdir:$filelist}
{foreach from=$filelist item="file" }
<tr>
<td> <a href="{$file}" >{$file} </a> </td>
</tr>
{/foreach}
config.inc.php so:
Code: Select all
function serendipity_smarty_getdir($alt , $filelist) {
if ($dir = @opendir($alt)) {
while (($file = readdir($dir)) !== false){
if($file != ".." && $file != "." && strpos($file,"serendipityThumb.")==false){
echo $file.' ';
$filelist[] = $file;
}
}
closedir($dir);
asort($filelist);
}
}
$serendipity['smarty']->registerPlugin('modifier', 'serendipity_getdir', 'serendipity_smarty_getdir');
was nicht funktioniert ist der Smarty-Zugriff auf $filelist in der entries.tpl
Re: Template - Verzeichnis einlesen
Posted: Tue Aug 06, 2013 7:43 pm
by Timbalu
Bitte genauer.
Code: Select all
{foreach from=$filelist item="file" }
ist nicht mehr erlaubt. Richtig wäre:
Code: Select all
{foreach from=$filelist item="file"}
bzw besser (IMO) mit Smarty 3
Hilft das schon?

Re: Template - Verzeichnis einlesen
Posted: Tue Aug 06, 2013 9:17 pm
by reinhardl
Timbalu wrote:Bitte genauer.
Code: Select all
{foreach from=$filelist item="file" }
ist nicht mehr erlaubt. Richtig wäre:
Code: Select all
{foreach from=$filelist item="file"}
bzw besser (IMO) mit Smarty 3
Hilft das schon?

habe in der entries nun
Code: Select all
{foreach $filelist as $file}
<tr>
<td> <a href="{$file}" >{$file} </a> </td>
</tr>
{/foreach}
aber es wird nichts ausgegeben ...
Re: Template - Verzeichnis einlesen
Posted: Wed Aug 07, 2013 9:49 am
by Timbalu
Wird $filelist denn überhaupt geliefert
?
Schickes bs Template! Ist das von dir?
Was gibt denn {$entry.properties.ep_GalleryPath}? Jetzt nutzt du serendipity_getdir als modifier. Ist das wirklich gewollt?