Page 1 of 1

[Gelöst] Globalen Inhaltsblock mit Parametern aufrufen?

Posted: Fri Aug 21, 2009 8:07 am
by kris29
Hallo

Um mehrere Videoclips inkl. Player auf einer Seite einzubinden, erzeuge ich bisher für jede Videodatei einen eigenen Globalen Inhaltsblock mit dem entsprechenden Code (JW FLV Player, swfobject, ...).

Nun meine Frage. Wäre es möglich nur einen Globalen Inhaltsblock zu erstellen und Parameter, wie z.B. den Dateinamen der Videodatei als Variablen anzuhängen?

Beispiel:

Code: Select all

{global_content name='Videoplayer' dateiname='...' autostart='...' }
"dateiname" und "autostart"  die Variablen um die es geht.

Ich könnte mir vorstellen mein Anliegen ist mit Smarty leicht zu lösen. Leider bin ich darin nicht so fit und brauch eure Hilfe. Danke.

Re: Globalen Inhaltsblock mit Parametern aufrufen?

Posted: Fri Aug 21, 2009 2:05 pm
by NaN
Dazu müsste man den Tag {global_content} ändern.
Nur mit Smarty allein lässt sich das glaube ich nicht lösen.
kris29 wrote: Um mehrere Videoclips inkl. Player auf einer Seite einzubinden, erzeuge ich bisher für jede Videodatei einen eigenen Globalen Inhaltsblock mit dem entsprechenden Code (JW FLV Player, swfobject, ...).
Das finde ich etwas umständlich.
Warum rufst Du das Module nicht im Template auf?
Dann kannst Du den Dateinamen direkt an den Player übergeben.

Re: Globalen Inhaltsblock mit Parametern aufrufen?

Posted: Fri Aug 21, 2009 4:01 pm
by nicmare
und warum postest du es dann nicht im smarty-unterforum ? :D

Re: Globalen Inhaltsblock mit Parametern aufrufen?

Posted: Fri Aug 21, 2009 4:09 pm
by kris29
Hm, hast recht. Ich war mir nicht sicher, weil ich dachte mein Problem hätte auch was mit Modulen und Tags zu tun. Verschieben kann ich's leider nun nicht mehr.

Re: Globalen Inhaltsblock mit Parametern aufrufen?

Posted: Fri Aug 21, 2009 6:58 pm
by kris29
NaN wrote: Warum rufst Du das Module nicht im Template auf?
Dann kannst Du den Dateinamen direkt an den Player übergeben.
Die Videoclips sollen im Content-Bereich der Webseite abgespielt werden. Der User lädt sie ins Verzeichnis "video" und sollte - in meinem Wunschszenario - das Video nun im Editor mittels einer Textzeile {global_content name='Videoplayer' dateiname='...' autostart='...' } einfügen können.

Wie meinst du das mit "das Modul im Template aufrufen"?

Re: Globalen Inhaltsblock mit Parametern aufrufen?

Posted: Fri Aug 21, 2009 9:10 pm
by NaN
nicmare wrote: und warum postest du es dann nicht im smarty-unterforum ? :D
kris29 wrote: Hm, hast recht. Ich war mir nicht sicher, weil ich dachte mein Problem hätte auch was mit Modulen und Tags zu tun. Verschieben kann ich's leider nun nicht mehr.
Verschieben können wir es immer noch ;)
Aber ich glaube eben nicht, dass sich das so einfach mit Smarty realisieren lässt.
Dazu müsste man den PHP Code des {global_content}-Tags anpassen (die neuen Parameter als Template Variable einfügen).
Falls es doch mit Smarty gehen sollte, dann verschieben wir es eben dorthin oder machen einen neuen Thread inklusive Lösung auf.
kris29 wrote: Wie meinst du das mit "das Modul im Template aufrufen"?
Für die Seiten, auf denen die Videos abgespielt werden sollen, könnte man einfach ein neues Seiten-Template anlegen.
Der Benutzer lädt das Video mit dem Tiny (oder wie auch immer) hoch und gibt in einem Feld (ein zweiter content block mit dem Parameter oneline=true) nur den Pfad zum Video an (finde ich sogar noch besser als immer den Smarty Code eingeben zu müssen).
Im Template kannst Du dann einfach den SWF Player an der Stelle platzieren wo er sein soll und und übergibst als Variable an den Player den Inhalt des zweiten content blocks.

Re: Globalen Inhaltsblock mit Parametern aufrufen?

Posted: Sat Aug 22, 2009 7:24 am
by kris29
NaN wrote: Im Template kannst Du dann einfach den SWF Player an der Stelle platzieren wo er sein soll und und übergibst als Variable an den Player den Inhalt des zweiten content blocks.
Die Lösung mit dem Template klingt gut, setzt aber voraus, dass die Videos immer an der gleichen Stelle erscheinen. Ich wollte die Videos frei zwischen dem Text (im TinyMce) einbinden können. Zum Beispiel in einem Newseintrag, wo es verschieden viele Videos geben kann und der User entscheidet, an welcher Stelle er die Videos in seinem Artikel platziert (ähnlich wie Videopostings in einem Blog).

Re: Globalen Inhaltsblock mit Parametern aufrufen?

Posted: Sat Aug 22, 2009 7:02 pm
by NaN
Wie sieht denn der Inhalt des globalen Inhaltsblocks aus?
Rufst Du da noch ein Modul auf oder ist dort nur HTML drin womit Du dann den Player anzeigen lässt?
Wenn PHP keine allzu große Hürde für Dich darstellt, versuch das doch lieber mit einem UDT.

Oder dem Object Tag.

Re: Globalen Inhaltsblock mit Parametern aufrufen?

Posted: Sun Aug 23, 2009 5:21 pm
by kris29
Der Code vom Inhaltsblock sieht z.Z. so aus:

Code: Select all

<__script__ type='text/javascript' src='mediaplayer/swfobject.js'></__script>
  <div id='mediaspace'><p><a href="http://get.adobe.com/flashplayer">Flash Plugin installieren</a> um den Videoplayer zu sehen.</p></div>

  <__script__ type='text/javascript'>
  var s1 = new SWFObject('mediaplayer/player.swf','ply','480,'280','9','#ffffff');
  s1.addParam('allowfullscreen','true');
  s1.addParam('allowscriptaccess','always');
  s1.addParam('wmode','opaque');
  s1.addParam('flashvars','file={root_url}/uploads/video/clip-01.flv&autostart=false');
  s1.write('mediaspace');
</__script>
Das Object Tag hab ich mir auch schon angeschaut, allerdings hab ich nicht rausfinden können, ob sich auch Video- und MP3-Dateien mit einem Player meiner Wahl abspielen lassen.

Re: Globalen Inhaltsblock mit Parametern aufrufen?

Posted: Sun Aug 23, 2009 8:42 pm
by NaN
kris29 wrote: Das Object Tag hab ich mir auch schon angeschaut, allerdings hab ich nicht rausfinden können, ob sich auch Video- und MP3-Dateien mit einem Player meiner Wahl abspielen lassen.
Aber selbstverfreilich. Wozu sollte dieses Plugin denn sonst gut sein?
Auszug aus der Modulhilfe:

Code: Select all

{object type="flash" src='uploads/movie.swf' height='300' width='300' param='quality::low||bgcolor::#ffffff' alt='Download Flash Player'}
Beim Parameter src einfach den Pfad zum Player Deiner Wahl eingeben und bei param die Parameter, die Du an den Player übergeben willst (parameter_name1::parameter_wert||parameter_name2::wert|| ... ).
Wenn Du den Pfad nicht für jedes Video neu angeben willst, kannst Du das Object-Plugin einfach etwas abändern, indem Du in Zeile 22 (innerhalb der Funktion smarty_cms_function_object) einfach folgendes einfügst:

Code: Select all

$params['src'] = "Pfad zum Player Deiner Wahl";
Somit wird generell Dein Player geladen und Du brauchst den Parameter src nicht mehr anzugeben.
Dasselbe könntest Du mit jedem Parameter machen, der sich a) nie ändert und den Du b) nicht immer wieder neu angeben willst.

Wenn Du weiterhin Deine Javascript-Variante verwenden willst, dann sähe der Code für einen UDT ungefähr so aus:

Code: Select all

global $gCms;

$autostart = false;
if(isset($params['autostart']))
	$autostart = trim($params['autostart']);

$file = '';
if(isset($params['file']))
	$file = trim($params['file']);

$output = '
<__script__ type="text/javascript" src="mediaplayer/swfobject.js"></__script>
<div id="mediaspace"><p><a href="http://get.adobe.com/flashplayer">Flash Plugin installieren</a> um den Videoplayer zu sehen.</p></div>
<__script__ type="text/javascript">
	var s1 = new SWFObject("mediaplayer/player.swf","ply","480,"280","9","#ffffff");
	s1.addParam("allowfullscreen","true");
	s1.addParam("allowscriptaccess","always");
	s1.addParam("wmode","opaque");
	s1.addParam("flashvars","file='.$gCms->config['uploads_url'].'/video/'.$file.'&autostart='.$autostart.'");
	s1.write("mediaspace");
</__script>';

echo $output;
Speichere den Spaß unter "Erweiterungen->Benutzerdefinierte Tags" mit Namen ... sagen wir, "video".
Aufgerufen wird er dann z.B. so:

Code: Select all

{video file="video.flv" autostart="false"}

Re: Globalen Inhaltsblock mit Parametern aufrufen?

Posted: Mon Aug 24, 2009 3:38 pm
by kris29
Danke NaN für die Hilfe! Klappt super.

Damit auch mehrere Player auf einer Seite angezeigt werden können, habe ich die id="mediaspace" um eine Zufallszahl erweitert um sie einmalig zu machen.

Code: Select all

global $gCms;

$autostart = false;
if(isset($params['autostart']))
	$autostart = trim($params['autostart']);

$file = '';
if(isset($params['file']))
	$file = trim($params['file']);

$zufallszahl = rand(1, 100);

$output = '
<__script__ type="text/javascript" src="mediaplayer/swfobject.js"></__script>
<div id="mediaspace $zufallszahl"><p><a href="http://get.adobe.com/flashplayer">Flash Plugin installieren</a> um den Videoplayer zu sehen.</p></div>
<__script__ type="text/javascript">
	var s1 = new SWFObject("mediaplayer/player.swf","ply","480","280","9","#ffffff");
	s1.addParam("allowfullscreen","true");
	s1.addParam("allowscriptaccess","always");
	s1.addParam("wmode","opaque");
	s1.addParam("flashvars","file='.$gCms->config['uploads_url'].'/video/'.$file.'&autostart='.$autostart.'");
	s1.write("mediaspace $zufallszahl");
</__script>';

echo $output;