Gelöst Käufersiegel Rich Snippets Script einbauen

zuhcap

Aktives Mitglied
9. Februar 2015
5
0
Hallo JTL-Freunde,

Shopversion: 4.06 (Build: 11), PHP 5.6

Ich möchte das Händlerbund-Script in den Shop einbauen.

1. Ich habe lt. Anleitung im Child-Template die Datei functions.php angelegt.
2. Das Script in eine Smarty-Funktion gepackt.
3. Im Template eingebunden mit: {getKBewertungen()}

Bei file_put_contents oder file_get_contents scheint Schluss zu sein. Es wird keine Datei erstellt. Es wird auch nicht in eine angelegt Test-Datei geschrieben oder daraus gelesen (tmp/IHRE_SHOP_ID.json). Dateiberechtigungen wurden beachtet.

Kann es sein, dass Lesen & Schreiben in Dateien hier nicht zulässig ist? Oder ist meine Smarty-Funktion falsch?

PS: Ein zum Test eingefügtes echo $output; gibt die Daten der API korrekt aus. Im Shop-Root getestet funktioniert das Script. (ohne Smarty-Funktion)

Hier das Script:
PHP:
$smarty->registerPlugin('function', 'getKBewertungen', 'getKBewertungen');

function getKBewertungen()

 {
    $shopId = 'IHRE_SHOP_ID';
    $cacheFileName = 'tmp/' . $shopId . '.json';
    $cacheTimeOut = 286400;
    $apiUrl = 'http://service.kaeufersiegel.de/rating/' . $shopId;
    $loadFromCache = true;

    
    if (file_exists($cacheFileName) && time() - filemtime($cacheFileName) < $timeout) {

        $loadFromCache = false;
    }

    if ($loadFromCache) {

        $ch = curl_init();
        // load fresh from API
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, false);
        curl_setopt($ch, CURLOPT_URL, $apiUrl);
        $output = curl_exec($ch);
        curl_close($ch);

        file_put_contents($cacheFileName, $output);
    }
// echo  $output; Test Ausgabe API > okay

    $jsonObject = json_decode(file_get_contents($cacheFileName), true);

        
    if ($jsonObject && $jsonObject['count'] > 0){
        $rating = $jsonObject ['rating'];
        $count = $jsonObject ['count'];
        $url = $jsonObject ['url'];

        $write = '<div itemprop="aggregateRating" itemscope="" itemtype="http://schema.org/AggregateRating">';
        $write .= 'Der Shop wurde bei kaeufersiegel.de mit ';
        $write .= '<span itemprop="ratingValue" content="' . $rating . '">' . $rating . '</span> von ';
        $write .= '<span itemprop="bestRating" content="5">5</span> ';
        $write .= 'Sternen bewertet - basierend auf <a href="' . $url . '"><span itemprop="ratingCount" content="' . $count . '">' . $count . '</span> Bewertungen</a></div>';     
      
        echo $write;
        
    }
        
 }

Danke

Tom
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
7.207
1.939
Berlin
Du solltest hier als erstes einen gültigen Pfad verwenden, am besten zum templates_c Verzeichnis:
$cacheFileName

Ein echo am ende wäre auch falsch, hier gehört ein return hin.
 

zuhcap

Aktives Mitglied
9. Februar 2015
5
0
@Tomas
Danke, aber es geht nur um die Rich Snippets und der Ausgabe des Textes wie: "Der Shop wurde bei kaeufersiegel.de mit 4.87 von 5 Sternen bewertet - basierend auf 7116 Bewertungen"

Du solltest hier als erstes einen gültigen Pfad verwenden, am besten zum templates_c Verzeichnis:
$cacheFileName

Ein echo am ende wäre auch falsch, hier gehört ein return hin.


Ausgabe mit "return" statt "echo" bringt keine Veränderung. Mit dem templates_c Ordner als Quelle funktioniert es auch nicht:
Code:
$cacheFileName = '../../../templates_c/' . $shopId . '.json';


(Teil-)Lösung: Mit einem zusätzlichen "/" bei "/tmp" funktioniert es, allerdings immer nur mit Live-Daten (ohne das cachen der Daten in einer Datei).
Code:
$cacheFileName = '/tmp/' . $shopId . '.json';


Was weiterhin nicht funktioniert, ist das Schreiben & Lesen einer Datei, zumindest nicht in der child-template/php/function.php.

Wenn jemand eine Idee hat, wie ich sonst noch PHP-Code im Template einbinden kann, dann wäre ich dankbar. (ohne Plugin)

Danke.

Tom