Template in Posting einbinden
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Template in Posting einbinden
Hallo,
ich bastle gerade am Amazon Mod etwas herum und brauche noch ein paar Infos.
Ich möchte gerne eine php-Datei mit Template innerhalb eines Postings in den message Text einbinden. Die php Datei über den BBCode aufrufen und im Posting verwenden läuft schon, nur weis ich nicht, wie ich das mit dem Template hin bekomme. <!-- INCLUDE amazon2.html --> im BBCode klappt nicht.
Gruß Helmut
ich bastle gerade am Amazon Mod etwas herum und brauche noch ein paar Infos.
Ich möchte gerne eine php-Datei mit Template innerhalb eines Postings in den message Text einbinden. Die php Datei über den BBCode aufrufen und im Posting verwenden läuft schon, nur weis ich nicht, wie ich das mit dem Template hin bekomme. <!-- INCLUDE amazon2.html --> im BBCode klappt nicht.
Gruß Helmut
Ich bin nicht ganz dicht.... na und.
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
Wie hast du dir das denn vorgestellt mit dem BBcode? Ich sehe da im Moment keine Anwendung wo man ganze Templates in einen BBcode einbauen müsste (aus dem Grund dürfte das auch nicht vorgesehen sein). Ich meine das ist so aufgebaut, dass im BBcode keinerlei Templates funktionieren, wenn du da irgendwas dynamisch einbauen möchtest musst du das wohl denke ich ohne Template realisieren (oder in den bbcode direkt mit einbauen soweit möglich, das geht aber nur bis zu einem gewissen Grad, da Templateanweisungen nicht funktionieren dürften).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Hallo gn#36,
im konkreten Fall geht es um den Amazon Mod, da sollte die Darstellung dann genauso wie mit den Templates funktionieren, damit man leicht das Design der Ausgabe an andere Styles anpassen kann. Noch ist es so realisiert, dass im BBCode eine php Datei aufgerufen wird, welche die Daten dann vom Amazon Server holt und auch darstellt.
BBCode (HTML Ersetzung)
Erstellung der Ausgabe in der functions_amazon_pack.php (Ausschnitt)
Hier wird eine Tabelle mit festem Design erstellt, welche dann in der amazon_bb.php (Ausschnitt) ausgegeben wird.
Die gesamte Darstellung der Artikelanzeige befindet sich also in $amazon['text'], was für eine Anpassung an eigene Bedürfnisse sehr ungünstig ist. Dazu kommt dann noch die tinyAjax.js Datei, welche die Übergabe der Daten vornimmt.
Hier wollte ich es eben so regeln, dass das Design komtplett in einer eingebundenen HTML Datei bestimmt wird.
Gruß Helmut
im konkreten Fall geht es um den Amazon Mod, da sollte die Darstellung dann genauso wie mit den Templates funktionieren, damit man leicht das Design der Ausgabe an andere Styles anpassen kann. Noch ist es so realisiert, dass im BBCode eine php Datei aufgerufen wird, welche die Daten dann vom Amazon Server holt und auch darstellt.
BBCode (HTML Ersetzung)
Code: Alles auswählen
<div id="N{IDENTIFIER}" style="border:1px solid #ccc; background-color:#fff;">
<img src="./images/loading_blue.gif" alt="" /> Amazondaten werden geladen.
</div>
<script type="text/javascript">
new Ajax.Updater('N{IDENTIFIER}','./amazon_bb.php',
{
method: 'get',
parameters: { ASIN: '{IDENTIFIER}' }
});
</script>
Code: Alles auswählen
[...]
if ($E)
{
$url=($f_rich)?local_base_url($local_id ,'nor') ."/exec/obidos/ASIN/".$E['ASIN'].'/ref=nosim/'.partner_id($Aassociates_id).'?dev-t='.$dev_token : $E['url']; //rebuild the URL if you want 7.5% instead of 5% and want to get rid of the distracting inbetween page:
$tabelle = '<div class="ap_product_image">';
if ($dim=$E['ImageSets']['ImageSet']['MediumImage']['URL'])
{
$tabelle .= '<a href="'.$url.'"><img src="'.$dim.'" style="border: 0px;" alt="" /></a>';
}
elseif ($dim=$E['MediumImage']['URL'])
{
$tabelle .= "<a href='$url'><img src='$dim' style='border: 0px;' alt='' /></a>";
}
if ($dil=$E['LargeImage']['URL'])
{
$tabelle .= "<br /><a href='javascript:void(0);' class='small' onclick=\"javascript:neu=window.open('$dil','loose','height=525,width=400,menubar=0,status=0,scrollbars=0,resizable=1');\">".$user->lang['AMAZON_PACK_LARGE_IMAGE']."</a>";
}
$tabelle .= '</div>';
$tabelle.='<div class="ap_product_table">';
if ($d=$E['ItemAttributes']['Title'])
{
$tabelle .= '<h4><a href="'.$url.'">'.$d.'</a></h4><br />';
}
if (is_array($aa=$E['ItemAttributes']['Author']))
{
$tabelle .= $user->lang['AMAZON_PACK_AUTHORS'];
foreach ($aa as $i=>$d)
[...]
Code: Alles auswählen
[...]
echo $amazon;
}
else
{
$amazon = amazon_url_parser($asin, $debug);
if($debug)
{
echo "<pre>";
var_dump($amazon);
echo "</pre>";
exit;
}
echo $amazon['text'] . '<p class="amzon_link" align="right"><a href="'.$amazon['url'].'" onclick="window.open(this.href); return false;"><img style="border=0px;" alt="" src="./images/buy_amazon.gif" /></a></p>';
echo "<div class=\"copyright\" style=\"font-size:0.8em;\">".$user ->lang['AMAZON_PACK_LL_COPYRIGHT']."</div>";
}
[...]
Code: Alles auswählen
/*
Quelle: http://snippets.dzone.com/posts/show/2025
*/
function $(e){if(typeof e=='string')e=document.getElementById(e);return e};
function collect(a,f){var n=[];for(var i=0;i<a.length;i++){var v=f(a[i]);if(v!=null)n.push(v)}return n};
ajax={};
ajax.x=function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest()}}};
ajax.serialize=function(f){var g=function(n){return f.getElementsByTagName(n)};var nv=function(e){if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};var i=collect(g('input'),function(i){if((i.type!='radio'&&i.type!='checkbox')||i.checked)return nv(i)});var s=collect(g('select'),nv);var t=collect(g('textarea'),nv);return i.concat(s).concat(t).join('&');};
ajax.send=function(u,f,m,a){var x=ajax.x();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseText)};if(m=='POST')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a)};
ajax.get=function(url,func){ajax.send(url,func,'GET')};
ajax.gets=function(url){var x=ajax.x();x.open('GET',url,false);x.send(null);return x.responseText};
ajax.post=function(url,func,args){ajax.send(url,func,'POST',args)};
ajax.update=function(url,elm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.get(url,f)};
ajax.submit=function(url,elm,frm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.post(url,f,ajax.serialize(frm))};
ajax.center=function(elm){document.getElementById(elm).style.left = ( screen.availWidth - 300 ) / 2 +"px";document.getElementById("amazonpopup").style.top = ( screen.availHeight - 100 ) / 2 +"px";}
//Amazon BBcode-Popup
function show_amazon(asin)
{
var content='<img src="./images/loading_blue.gif" alt="" /> Daten werden geladen!';
close_amazon();
content = ajax.gets('./amazon_bb.php?ASIN='+asin+'&mode=popup');
document.getElementById('amazondata').innerHTML = content;
document.getElementById('amazonpopup').style.display='block';
ajax.center('amazonpopup');
//debug alert(content);
}
function close_amazon()
{
document.getElementById('amazonpopup').style.display='none';
document.getElementById('amazondata').innerHTML = '<img src="./images/loading_blue.gif" alt="" /> Daten werden geladen!';
}
Gruß Helmut
Ich bin nicht ganz dicht.... na und.
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
Hm das einfachste wird wohl sein das per output Buffering [php:ob_start] zu machen. Du packst die Daten alle in ein Template, lässt dieses dann manuell per $template->display darstellen und fängst den Output ein und packst ihn in den BBcode.
Alternativ sehe ich gerade dass die alte geschichte ein Template einer Variablen zuzuschieben nicht völlig gestorben ist, du könntest also auch assign_display benutzen.
Alternativ sehe ich gerade dass die alte geschichte ein Template einer Variablen zuzuschieben nicht völlig gestorben ist, du könntest also auch assign_display benutzen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Hallo gn#36,
danke dir für die Tipps, mit assign_display() könnte es klappen. Ich habe jetzt ein paar Versuche gemacht, aber ich bekomme immer eine Fehlermeldung template->_tpl_load_file(): File /amazon2.html does not exist or is empty. Diese Fehlermeldung erscheint innerhalb des Fensters in dem die Infos vom Amazonmod angezeigt werden, das ist schon mal ganz vielversprechend. Ich habe den Code mal testweise in die amazon_bb.php eingebunden:
Die HTML Datei befindet sich im Template Ordner wo auch die overall_header.html liegt und sicht testweise so aus:
Irgendwie komme ich jetzt nicht weiter, da ich mir nicht sicher bin, ob ich es so richtig umgesetzt habe.
Gruß Helmut
danke dir für die Tipps, mit assign_display() könnte es klappen. Ich habe jetzt ein paar Versuche gemacht, aber ich bekomme immer eine Fehlermeldung template->_tpl_load_file(): File /amazon2.html does not exist or is empty. Diese Fehlermeldung erscheint innerhalb des Fensters in dem die Infos vom Amazonmod angezeigt werden, das ist schon mal ganz vielversprechend. Ich habe den Code mal testweise in die amazon_bb.php eingebunden:
Code: Alles auswählen
$compiled_amazon = array();
if (!isset($template->filename['amazon2_tpl']))
{
$template->set_filenames(array(
'amazon_tpl' => 'amazon2.html')
);
}
$compiled_amazon = "Testeintrag";
$template->assign_vars(array(
'S_TEST' => $amazon['Author'],
'S_TEST2' => $compiled_amazon,
));
$compiled_amazon[] = $template->assign_display('amazon_tpl');
Code: Alles auswählen
<div>
Test neu
<p> {S_TEST}<br />{S_TEST2}</p>
</div>
Gruß Helmut
Ich bin nicht ganz dicht.... na und.
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
Hm eigentlich sollte der Template Pfad schon gesetzt werden, bist du sicher dass du die Dateien auch in dem Ordner liegen hast den du als Template benutzt (falls du mehrere Templates installiert hast)?
Ansonsten würde ich mal versuchen Teile des Pfads zum Template hinzuzufügen um herauszufinden wie viel fehlt. Vielleicht wird dieser Teil des Templatesystems erst nach den BBcode Geschichten initialisiert und steht daher zu dem Zeitpunkt noch nicht zur Verfügung (dann müsstest du das quasi übernehmen).
Ansonsten ist mir nicht ganz klar was du hiermit bezwecken willst:
Erst ist $compiled_amazon ein String, dann soll es plötzlich ein Array sein? Ich gebe zu dass ich noch nie probiert habe auf diese Weise auf die einzelnen Buchstaben im String zuzugreifen (bzw. in dem Fall den String zu erweitern), aber an deiner Stelle würde ich das eher per .= an den String hängen, bei [] kommt zumindest mir immer der Gedanke eines reinen Arrays (und nicht strings) und es ist mit sicherheit von vorteil wenn man auch in ein paar Tagen/Monaten/Jahren noch weiß was der Code tun soll.
Ansonsten würde ich mal versuchen Teile des Pfads zum Template hinzuzufügen um herauszufinden wie viel fehlt. Vielleicht wird dieser Teil des Templatesystems erst nach den BBcode Geschichten initialisiert und steht daher zu dem Zeitpunkt noch nicht zur Verfügung (dann müsstest du das quasi übernehmen).
Ansonsten ist mir nicht ganz klar was du hiermit bezwecken willst:
Code: Alles auswählen
$compiled_amazon = "Testeintrag";
$template->assign_vars(array(
'S_TEST' => $amazon['Author'],
'S_TEST2' => $compiled_amazon,
));
$compiled_amazon[] = $template->assign_display('amazon_tpl');
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Hallo gn#36,
das mit dem Pfad habe ich getestet, auch wenn ich den komplett eingebe, dann kommt trotzdem die Fehlermeldung template->_tpl_load_file(): File /styles/prosilver/template/amazon2.html does not exist or is empty. Vermutlich stimmt der Pfad aber der Inhalt nicht.
Ich habe jetzt eine kleine Testdatei gemacht, die ich direkt aus dem Rootverzeichnis vom phpbb3 manuell aufrufe.
Ich komme nicht dahinter, wie genau ich assign_display() anwenden muss, damit ich die Daten auch angezeigt bekomme. Die HTML Datei ist im richtigen Template Ordner.
Gruß Helmut
das mit dem Pfad habe ich getestet, auch wenn ich den komplett eingebe, dann kommt trotzdem die Fehlermeldung template->_tpl_load_file(): File /styles/prosilver/template/amazon2.html does not exist or is empty. Vermutlich stimmt der Pfad aber der Inhalt nicht.
Ich habe jetzt eine kleine Testdatei gemacht, die ich direkt aus dem Rootverzeichnis vom phpbb3 manuell aufrufe.
Code: Alles auswählen
<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
{
global $template;
$compiled_amazon = array();
$template->set_filenames(array(
'amazon_tpl' => 'styles/prosilver/template/amazon2.html')
);
$compiled_amazon1 = 'Testeintrag';
$template->assign_vars(array(
'S_TEST2' => $amazon['Author'],
'S_TEST' => $compiled_amazon1,
));
$compiled_amazon .= $template->assign_display('amazon_tpl');
}
?>
Gruß Helmut
Ich bin nicht ganz dicht.... na und.
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
Vielleicht ist auch das nicht der volle Pfad... je nach dem wo die Basis für einen relativen Pfad liegt. Nichts destoweniger sollte allerdings der einfache Name reichen. (Ein vollständiger (absoluter) Pfad würde aus dem kompletten Pfad vom Wurzelverzeichnis aus bestehen, also z.b. /srv/www/htdocs/forum/styles/...)
Schauen wir also mal in die Template Geschichten.
Meine Vermutung wäre, dass set_template erst nach deinem Aufruf aufgerufen wird. Ich würde einfach mal probieren was passiert wenn du das vor deinem assign_display aufrufst.
Schauen wir also mal in die Template Geschichten.
Meine Vermutung wäre, dass set_template erst nach deinem Aufruf aufgerufen wird. Ich würde einfach mal probieren was passiert wenn du das vor deinem assign_display aufrufst.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Hallo gn#36,
ich habe jetzt deine Tipps versucht, aber leider hat nichts geklappt. Wenn ich den absoluten Pfad eingebe, dann erscheint der in der Fehlermeldung, auch set_template vorher einbauen, bringt nichts. Ich vermute eher, dass das Format für der Daten welche in assign_display rein müssen, nicht in der richtigen Form vorliegen. Ich habe mir auch mal die functions_content.php angeschaut, dort wird assign_display auch verwendet, aber ich blicke da nicht durch wie das genau zusammenhängt.
Gruß Helmut
ich habe jetzt deine Tipps versucht, aber leider hat nichts geklappt. Wenn ich den absoluten Pfad eingebe, dann erscheint der in der Fehlermeldung, auch set_template vorher einbauen, bringt nichts. Ich vermute eher, dass das Format für der Daten welche in assign_display rein müssen, nicht in der richtigen Form vorliegen. Ich habe mir auch mal die functions_content.php angeschaut, dort wird assign_display auch verwendet, aber ich blicke da nicht durch wie das genau zusammenhängt.
Gruß Helmut

Ich bin nicht ganz dicht.... na und.
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
Verstehe ich nicht, das wird da eigentlich nicht anders benutzt als du das ursprünglich benutzt hast. Template setzen und dann in die Variable schreiben, das geht auch nicht anders als beim regulären Template.
Aber da fällt mir das Standard-Problem Nummer 1 ein: Cache geleert?
Man weiß ja nie ob es nicht irgendwo eine Liste aller vorhandenen Templates gibt (in der deins dann logischerweise nicht drin steht).
Aber da fällt mir das Standard-Problem Nummer 1 ein: Cache geleert?
Man weiß ja nie ob es nicht irgendwo eine Liste aller vorhandenen Templates gibt (in der deins dann logischerweise nicht drin steht).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.