[gelöst] Template - Verzeichnis einlesen

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
reinhardl
Regular
Posts: 258
Joined: Wed Jun 20, 2007 8:54 am
Location: Germany

[gelöst] Template - Verzeichnis einlesen

Post 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
Last edited by reinhardl on Wed Aug 07, 2013 7:58 pm, edited 1 time in total.
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: Template - Verzeichnis einlesen

Post 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
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: Template - Verzeichnis einlesen

Post 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
# 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/
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: Template - Verzeichnis einlesen

Post by Timbalu »

Ak ok. Ich wollte keine Verwirrung stiften! :wink:
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...
Regards,
Ian

Serendipity Styx Edition and additional_plugins @ https://ophian.github.io/ @ https://github.com/ophian
reinhardl
Regular
Posts: 258
Joined: Wed Jun 20, 2007 8:54 am
Location: Germany

Re: Template - Verzeichnis einlesen

Post 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... :?
reinhardl
Regular
Posts: 258
Joined: Wed Jun 20, 2007 8:54 am
Location: Germany

Re: Template - Verzeichnis einlesen

Post 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?
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Template - Verzeichnis einlesen

Post 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
# 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/
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: Template - Verzeichnis einlesen

Post by Timbalu »

Und wenn schon dann bitte auch mit neuer Syntax, denn wir sind ja schließlich im Smarty 3 Land... :wink:
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)
Regards,
Ian

Serendipity Styx Edition and additional_plugins @ https://ophian.github.io/ @ https://github.com/ophian
reinhardl
Regular
Posts: 258
Joined: Wed Jun 20, 2007 8:54 am
Location: Germany

Re: Template - Verzeichnis einlesen

Post 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
reinhardl
Regular
Posts: 258
Joined: Wed Jun 20, 2007 8:54 am
Location: Germany

Re: Template - Verzeichnis einlesen

Post 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}
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Template - Verzeichnis einlesen

Post 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
# 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/
reinhardl
Regular
Posts: 258
Joined: Wed Jun 20, 2007 8:54 am
Location: Germany

Re: Template - Verzeichnis einlesen

Post 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
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: Template - Verzeichnis einlesen

Post 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

Code: Select all

{foreach $filelist as $file}
Hilft das schon? :)
Regards,
Ian

Serendipity Styx Edition and additional_plugins @ https://ophian.github.io/ @ https://github.com/ophian
reinhardl
Regular
Posts: 258
Joined: Wed Jun 20, 2007 8:54 am
Location: Germany

Re: Template - Verzeichnis einlesen

Post 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

Code: Select all

{foreach $filelist as $file}
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 ...
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: Template - Verzeichnis einlesen

Post by Timbalu »

Wird $filelist denn überhaupt geliefert

Code: Select all

<pre>{$filelist|print_r}</pre>
?
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?
Regards,
Ian

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