Der Bereich Shopware Labs ist die Plattform für alle Entwickler. Hier findet man technische Dokumentationen und zahlreiche Tipps und Tricks rund um das Thema Programmieren. In dieser Rubrik stellen außerdem die Entwickler der shopware AG neue und experimentelle Lösungsansätze vor. Neue Funktionen, die in dieser Rubrik bereitgestellt werden, sind teilweise auch für zukünftige Releases geplant. Die Funktionen können dann ohne Programmierkenntnisse zukünftig direkt im Shopware Backend konfiguriert werden oder werden über Plugins bereitgestellt. Informationen über neue, geplante Funktionen finden Sie in unserer Roadmap.
Bitte beachten Sie, dass die hier bereitgestellten Lösungsansätze nicht offiziell supportet werden und nur eingebaut werden sollten, sofern Sie über das entsprechende, technische Wissen verfügen.
Auslagerung Generierung SEO-Links / Such-Cache mit Cronjob
- shopware AG
- 12.08.2010
- 3.0.5
- 1
-
- Cache, Caching, SEO-Urls, intelligente Suche
- Labs/ Tutorials
- Kein Support
Inhaltsverzeichnis
Vorwort
Mit dieser Erweiterung ist es möglich, die SEO-Urls und den Cache der intelligenten Suche per Cronjob, z.B. nachts, neu generieren zu lassen.
Anlegen der neuen inherit-Dateien
Legen Sie zwei neue Dateien unter engine/core/class/inherit/ an:
myRouter.php (SEO-Urls)
Inhalt:
<?php require_once($path.'/sRouter.php'); class myRouter extends sRouter { protected function sCheckRewriteTable() { } public function sCheckRewriteTableOriginal() { //$this->sSYSTEM->sMODULES['sArticles']->sCreateTranslationTable(); if(!$this->sSYSTEM->sSMARTY) $this->sSYSTEM->sInitSmarty(); $this->sSYSTEM->sSMARTY->register_resource('php', array( create_function('$tpl_name, &$tpl_source, &$smarty_obj', '$tpl_source = $tpl_name; return true;'), create_function('$tpl_name, &$tpl_timestamp, &$smarty_obj', '$tpl_timestamp = mktime(0,0,0,0,0,2000); return true;'), create_function('$tpl_name, &$smarty_obj', 'return true;'), create_function('$tpl_name, &$smarty_obj', ''), )); $this->sSYSTEM->sSMARTY->assign_by_ref('sConfig', $this->sSYSTEM->sCONFIG); $this->sSYSTEM->sSMARTY->assign_by_ref('sRouter', $this); $this->sSYSTEM->sSMARTY->register_function('sCategoryPath', array($this, 'sSmartyCategoryPath')); $this->sCreateRewriteTable(); } }
mySearch.php (Intelligente Suchfunktion)
Inhalt:
<?php require_once($path.'/sSearch.php'); class mySearch extends sSearch { function sInit() { $this->sDB =& $this->sSYSTEM->sDB_CONNECTION; $dir = realpath(dirname(__FILE__)."/../../../"); $this->sSYSTEM->sMODULES['sCache']->sCACHEDIR = "$dir/cache/vars/"; } function sInitOriginal() { $this->sDB =& $this->sSYSTEM->sDB_CONNECTION; $dir = realpath(dirname(__FILE__)."/../../../"); $this->sSYSTEM->sMODULES['sCache']->sCACHEDIR = "$dir/cache/vars/"; //$this->sSYSTEM->sMODULES['sArticles']->sCreateTranslationTable(); $this->sCreateIndex(); $this->sCleanUpIndex(); $this->sCleanUpKeywords(); $this->sSYSTEM->sMODULES['sCache']->sClearCache("search_*"); $this->sSYSTEM->sCONFIG['sCACHESEARCH'] = 0; } }
Datenbankänderungen
Durch dieses SQL-Befehl werden die beiden inherit-Dateien aktiviert, sowie der neue Cronjob definiert.
UPDATE `s_core_factory` SET `inheritname` = 'mySearch', `inheritfile` = 'mySearch.php' WHERE `s_core_factory`.`basename` = 'sSearch' LIMIT 1 ; UPDATE `s_core_factory` SET `inheritname` = 'myRouter', `inheritfile` = 'myRouter.php' WHERE `s_core_factory`.`basename` = 'sRouter' LIMIT 1 ; INSERT INTO `s_crontab` ( `id` , `name` , `action` , `elementID` , `data` , `next` , `start` , `interval` , `active` , `end` , `inform_template` , `inform_mail` ) VALUES ( NULL , 'Router', 'router', NULL , 'b:0;', '2000-00-00 00:00:00', '2000-00-00 00:00:00', '86400', '1', '2000-00-00 00:00:00', '', '' );
Erstellen des Cronjobs
der Cronjob sollte im HTTP-Context ausgeführt werden. Der Aufruf erfolgt also dann über die URL und nicht durch Ansteuerung des Skriptes direkt.
Das Interval ist standardmäßig auf 86400 Sekunden (1 Tag) eingestellt. Kann jedoch in den Grundeinstellungen geändert werden.
Aufruf z.B.: http://www.IHRE-DOMAIN-EINSETZEN.de/engine/connectors/cronjob/
Angelegt werden muss eine cronjob.php. Diese sollten Sie in folgendem Verzeichnis ablegen:
engine/connectors/cronjob/
cronjob.php
<?php require_once(realpath(dirname(__FILE__).'/../../../engine/core/php/sCronJob.php')); error_reporting(E_ALL); ini_set('display_error','1'); $cron = new sCronJob(); $cron->addJob('search','search'); $cron->addJob('router','router'); $cron->runJobs(); function search (&$cron, &$data, &$job) { $cron->loadClasses(); $cron->sSystem->sMODULES['sSearch']->sInitOriginal(); return true; } function router (&$cron, &$data, &$job) { $cron->loadClasses(); $cron->sSystem->sMODULES['sRouter']->sCheckRewriteTableOriginal(); return true; }
Einrichten eines Cronjobs in der Server-Oberfläche (Beispiel: Profihost)
Zusätzlich muss hier eine weitere Datei angelegt werden, um den Aufruf via HTTP-Context zu ermöglichen. Diese wird dann anstatt der eigentlichen cronjob.php ausgeführt.
index.php
#!/usr/local/php5/bin/php-cli <?php $url = 'http://www.IHRE-DOMAIN-EINTRAGEN.de/engine/connectors/cronjob/cronjob.php'; echo file_get_contents($url); ?>
Artikel-PDF erstellen
Erweiterung bewerten
Kommentare:
Update auf 3.5.4
22.07.2011 11:11Von: D.Stumpe
Wäre super, wenn dieser Artikel für die aktuelle Version angepasst werden würde.
Artikel kommentieren
Weitere interessante Artikel:
Bestell-Nr.: SW1394
Lieferzeit ca. 5 Tage
Preise inkl. gesetzlicher
MwSt. zzgl. Versandkosten*
Preise inkl. gesetzlicher
MwSt. + Versandkosten*
