Integration von Joomla CMS in Magento

Achtung, öffnet in einem neuen Fenster. Drucken

phpids

Zwar bietet Magento ein eigenes CMS, was sicherlich nicht zu unterschätzen ist. Trotz alledem ist man durch das Joomla CMS doch mehr als verwöhnt.

In diesem Tutorial wollen wir Ihnen die Integration des CMS von Joomla in Magento erklären.

Vorbereitungen

  1. Wir gehen davon aus, dass Sie einen betriebsfähigen Magento-Webshop in dem Root-Verzeichnis Ihres Webservers besitzen. Installieren Sie nun zusätzlich in einen Unterordner Ihrer Wahl eine Joomla-Installation. Für das Beispiel nehmen wir das Verzeichnis "joomla". 
  2. URL Rewrite muss aktiviert sein und die .htaccess von Joomla muss ebenfalls vorhanden sein.
  3. Fügen Sie die folgenden Zeilen zu der Joomla-htaccess Datei hinzu:
  4. RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
  5. Beide Systeme (Webshop und Joomla) müssen über die gleiche Domain erreichbar sein.

Modul-Erstellung

Wir gehen dabei folgendermaßen vor:

  1. Erstellen Sie ein neues Verzeichnis "Project" unter "app/code/local/Mage"
  2. Erstellen Sie ein weiteres Verzeichnis unterhalb von "Project" mit dem Namen "Block"
  3. Erstellen Sie nun eine Datei "Noroute.php" in demVerzeichnis "Block" und fügen Sie den folgenden Code dort ein (Zeile 5 ist eventuell an Ihr Joomla-Verzeichnis anzupassen):
  4. class Mage_Project_Block_Noroute extends Mage_Core_Block_Abstract {
       protected function _toHtml() {
       /** * This logic should be in the controller, model, but let's make
        * this quickly without lots of files :)
        */
         $uri = Mage::getBaseUrl() . 'joomla' . $this->getRequest()->getRequestString();
         $post = $this->getRequest()->getPost();
         $method = ( count($post) == 0 ) ? 'GET' : 'POST';
       /** * You can add additional
        * headers like cookies, redirects and so on
        * if you need it here.
        */
         $client = new Varien_Http_Client($uri);
         $client->setParameterPost($post);
         $response = $client->request($method);
         $body = $response->getBody();
        
         return $body;
        }
    }
  5. Um das Modul zu aktivieren, erstellen Sie eine Datei namens "Magento_Project.xml" unter dem VErzeichnis "app/etc/modules" and fügen dort den folgenden Code ein:
  6. <?xml version="1.0"?>
    <config>
        <modules>
           <Mage_Project>
              <active>true</active>
              <codePool>local</codePool>
           </Mage_Project>
        </modules>
    </config>

Layout-Erstellung

Um den Block auch darstellen zu können, wird eine Layout-Datei benötigt. Es handelt sich um die Datei "cms.xml". Diese ist normalerweise in jedem Template vorhanden. Der Einfachheit halber gehen wir davon aus, dass Sie das default-template benutzen. Begeben Sie sich also in den Ordner "app/design/frontend/default/default/layout/". Öffnen Sie die Datei "cms.xml" und bearbeiten Sie die "cms_index_defaultnoroute"-SEktion folgendermaßen:

<cms_index_defaultnoroute>
   <remove name="left">
   <reference name="root">
      <action method="setTemplate"><template>page/1column.phtml</template></action>
   </reference>
   <reference name="content">
      <block type="project/noroute" name="no_route"> </block> </reference>
   </reference>
</cms_index_defaultnoroute>

Finale Arbeiten

Deaktivieren Sie nun die 404-Seite von Magento. Begeben Sie sich dafür in die Administration und dort und "CMS->Manage Pages" und deaktivieren Sie die 404-Seite mit dem identifier "no-route".

Zum Schluss müssen Sie noch den Cache leeren, wenn Sie diesen aktiviert haben.

Was haben Sie jetzt mit diesen Schritten erreicht? Normalerweise verweist Magento bei einem Aufruf einer ungültigen Seite auf die nouroute.php. Der Trick ist nun, dass sämtliche 404-Errors (noroute) an Joomla weitergeleitet werden. Dort muss dann eine entsprechende Seite angelegt sein und auf einen Content verweisen. Ein Beispiel: Die Seite http://www.ihrwebshop.de/produktvergleich ist in Magento nicht angelegt. Ein Aufruf würde somit ins Leere laufen und die Seite noroute.php darstellen. In unserem Fall wird der Aufruf allerdings an Joomla weitergeleitet. In Joomla muss nun ein entsprechender Menüeintrag vorhanden sein, der im Alias "produktvergleich" stehen hat.

Mit diesem simplen Trick kann Joomla den Content in Magento darstellen und Sie haben wieder ein gewohntes CMS-System :)

Das Tutorial basiert auf: link