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)
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>
Erstellung der Ausgabe in der functions_amazon_pack.php (Ausschnitt)
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)
[...]
Hier wird eine Tabelle mit festem Design erstellt, welche dann in der amazon_bb.php (Ausschnitt) ausgegeben wird.
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>";
}
[...]
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.
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!';
}
Hier wollte ich es eben so regeln, dass das Design komtplett in einer eingebundenen HTML Datei bestimmt wird.
Gruß Helmut