Schick programmiert

Block außerhalb von Magento laden

In Magento ist alles, was im Shop zu sehen ist, als Block definiert.

Ich habe eine Möglichkeit gefunden einen Block auch auf einer anderen Seite zu laden, muss aber auf dem gleichen Server sein. Bisher hatte ich die zwei folgenden Anwendungsfälle:

  1. Block Random Products in einem WordPress-Auftritt anzeigen
  2. Eigene Seite für Statistiken nur anzeigen, wenn man auch im Backend angemeldet ist

Hierbei muss man zuerst entscheiden, welchen Store man in der externen Seite laden will. So lange man nur einen Store hat ist das alles recht einfach … Andernfalls muss man sich entscheiden, welchen Store man laden möchte.

Gehen wir zuerst das WordPress-Beispiel an:

Da dieser WordPress-Auftritt nur für einen Store genutzt wurde, fiel die Entscheidung leicht.

<?php
// Load the Magento-App so I can use its default-configuration values in here
require dirname(__FILE__) . '/app/Mage.php';
$app = Mage::app('shoes');

?>

Der Funktion app() bekommt in diesem Beispiel den Store-Code shoes mitgegeben. Magento lädt diesen Store mit allen Einstellungen. Wenn kein Code gesetzt wurde, wird der Standard-Store geladen. Der Standard-Store wird über die Website-Einstellungen und eine Store-Gruppe definiert.

Die Codes der Stores können in der Datenbanktabelle mage_core_stores eingesehen werden. Wenn jemand eine Stelle im Admin-Bereich kennt, wo man diesen Code einsehen kann, schreibt es bitte in das Kommentarfeld.

Nachdem der Magento-Core geladen ist, kann man mit folgendem Code einen Block laden:

<?php
if (!Mage::getStoreConfigFlag('advanced/modules_disable_output/Mage_Catalog'))
	echo Mage::getSingleton('core/layout')->createBlock('catalog/product_list_random')->setTemplate('catalog/product/list.phtml')->toHtml();
?>

Die IF-Bedingung habe ich darum gesetzt, weil man die Ausgabe von einem Modul im Backend deaktivieren kann. Diese Einstellung wird von der Funktion createBlock() nicht berücksichtigt.

Der zweite Anwendungsfall war auch nicht sehr schwierig.

Um zu Überprüfen, ob der Besucher im Backend angemeldet ist, kann folgender Code verwendet werden:

<?php

//get the admin session
Mage::getSingleton('core/session', array('name'=>'adminhtml'));

//verify if the user is logged in to the backend
if(Mage::getSingleton('admin/session')->isLoggedIn())
    echo "logged in";
else
    echo "not logged in";

?>

Danke Silvo für das Code-Beispiel: http://stackoverflow.com/questions/3342165/magento-how-to-check-if-admin-is-logged-in-within-a-module-controller

Selbstverständlich muss vor diesem Code bereits ein Store geladen sein.

Weiterführende Links:

http://fishpig.co.uk/magento-tutorials/accessing-static-blocks-in-magento
http://activecodeline.net/magento-init-process-bare-essentials


Categorised as: Uncategorized


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.