![php code](http://www.fly2mars-media.de/wp-content/uploads/2009/10/php-code.jpg)
Eine MySQL Datenbank kopieren als Linux Root
Mit dem folgendem Befehlt könnt ihr erfolgreich eine Magento Datenbank kopieren:
$ mysqldump -u root –password=pass db1 | mysql -u root –password=pass db2
Aktuelle Store ID abfragen
Manchmal ist es notwendig die aktuelle Store-ID abzufragen, das geht wie folgt:
Mage::app()->getStore()->getCode()
Aktuelles Land des gewählten Stores ausgeben / get current country of the selected store in Magento
public function getStoreCountry()
{
return Mage::getStoreConfig('general/country/default', Mage::app()->getStore()->getId());
}
Heraus finden ob ein Benutzer am System angemeldet ist
Das ist wirklich nützlich wenn Sie z.B. eine spezielle Nachricht oder Gutschein-Code nur für eingeloggte Kunden anzeigen wollen
Mage::getSingleton( 'customer/session' )->isLoggedIn()
Blocks anzeigen welche in dem Bereich nicht geladen sind (Template)
In dem Beispiel binden wir die Top-Suche außerhalb der header.phtml ein. Sie können die Methode überall in den Template-Dateien aufrufen, um Blücke anzuzeigen welche an der Stelle nicht geladen werden.
$this->getChildHtml()
<?php echo $this->getLayout()->getBlock('top.search')->toHtml()?>
Auch das Einbinden von Blocks ohne Template-Datei
Auch das Einbinden von Blocks ohne Template-Datei ist möglich, in der Layout-XML (z.B. page.xml) definiert ihr unter
<layout>
<default>
<block type="page/html" name="root" output="toHtml" template="page/2columns-left.phtml">
<block type="module_name/folder_one" name="folder_one" as="folder_one" />
</block>
</defaul>
</layout>
Beachtet dabei dass der Type „folder_one“ die Verzeichnis-Struktur im Modul-Ordner unter „Block“ ist.
Die Ausgabe erfolgt dann im entsprechenden Template (in diesem Fall page/2columns-left.phtml) durch:
echo $this->getLayout()->getBlock('etracker_track')->toHtml();
Ein bestimmtes Attribut ausgeben
Um den Namen eines Attributes in einer Bestellung anzuzeigen, folgenden Code aufrufen (z.B. in template/catalog/product/view.phtml ):
<?php echo $_product->getAttributeText('furniture_type') ?>
Wie gibt man den aktuellen Layout Ordner (theme folder) ausgeben?
<?php echo $this->getSkinUrl('') ?>
Die Ausgabe ist ähnlich: http://www.yoursite.com/skin/frontend/default/default/
Warum das sinnvoll ist:
Falls Sie ein neuen CSS Style hinzufügen wollen um z.B. ein Hintergrundbild anzuzeigen, ist der Beste Weg dieses in das Ihr Template Bilder Ordner zu packen und eine Referenz über diesen Aufruf zu setzen:
.className {
background-image: url( }
Oder eine JavaScript Datei einzubinden:
<script type="text/javascript" src="<?php echo $this->getSkinUrl('js/Script.js')?>">
Abfrage von Daten aus der Datenbank (ohne SQL-Abfrage)
Einige Module haben ein Resoure-Model definiert, über das Ihr Daten direkt von der Datenbank abfragen könnt (mapping). Der Zugriff erfolgt in der Regel dann für die Spalte xy über das die Methode getXy() des Models.
Abfrage von Daten aus der Datenbank (per SQL-Abfrage)
Im Rahmen der Entwicklung von Erweiterungen ist es ggf. notwendig Daten aus der Datenbank abzufragen.
Da Magento auf das ZendFramework basiert, ist der Aufruf identisch und zwar wie folgt:
$select = '';
$table = 'table_name';
$where = 'id=' . $id;
$order = '';
// read data
$connection = Mage::getSingleton('core/resource')
->getConnection('core_read');
$select = $connection->select()
->from($table)
->where($where)
->order($order);
$data = $connection->fetchAll($select);
Session Variable in Magento setzen und abfragen
Mage::getSingleton('core/session')->setYourVariable('data');
$Data = Mage::getSingleton('core/session')->getYourVariable();
Hier noch eine Übersicht von diversen häufig gebrauchten Funktionen (wird zukünftig noch erweitert):
Diverse Werte
<?php
$storeId = Mage::app()->getStore()->getId();
$storeName = Mage::app()->getStore()->getName();
$storeCode = Mage::app()->getStore()->getCode();
$groupId = Mage::app()->getStore()->getGroupID();
$groupName = Mage::app()->getStore()->getGroup()->getName();
$websiteName = Mage::app()->getWebsite()->getName();
Models
<?php
$customer = Mage::getModel('customer/customer');
$order = Mage::getModel('sales/order');
$product = Mage::getModel('catalog/product');
/* own modul in local */
Mage::getModel('namespace_modul/model')->init($item);
Blocks
<?php
$block = Mage::app()->getLayout()->createBlock('Namespace_Module_Block_BlockName');
Helpers
<?php
$helper = Mage::helper('helper');
Logging
<?php
Mage::log('Schreibe das ins Logfile');
Globale Variable setzen & auslesen
Globale Variable in Magento definieren:
Mage::register('globaleVariable', 'Inhalt');
Mage::log('log-message', Zend_Log::DEBUG, 'logefile.log');
Globale Variable in Magento auslesen:
Mage::registry('globaleVariable');
Globale Variable in Magento löschen:
Mage::unregister('globaleVariable');
Website ID anzeigen (website_id)
<?php echo Mage::app()->getWebsite()->getID(); ?>
StoreGroup ID anzeigen (group_id)
<?php echo Mage::app()->getStore()->getGroupID(); ?>
Website Name anzeigen (name)
<?php echo Mage::app()->getWebsite()->getName(); ?>
Store Name anzeigen (name)
<?php echo Mage::app()->getStore()->getGroup()->getName(); ?>
StoreView Name anzeigen (name)
<?php echo Mage::app()->getStore()->getName(); ?>
Skin URL
<?php echo $this->getSkinUrl('images/test.jpg') ?>
SKU anzeigen
<?php echo $this->htmlEscape($_product->getSku()) ?>
Hersteller anzeigen
<?php echo $_product->getAttributeText('manufacturer') ?>
Link zur anzeige einer Kategorie erzeugen
// die Zahl bei load() ist die Category-ID
Mage::getModel('catalog/category')->load('1000')->getUrl();
Link zu einem bestimmen Pfad erzeugen
$this->getUrl('checkout/cart/')
Alternativ
Mage::getBaseDir('lib'); // lib folder
Mage::getBaseDir('media'); // media folder
die aktuelle Action (ActionName) auslesen
// liefert als return zB. "new"
$this->getRequest()->getActionName());
den aktuellen Controller (ControllerName) auslesen
// liefert als return zB. "catalog"
$this->getRequest()->getControllerName());
Module überschreiben (config.xml)
Wenn ihr ein Model überschreiben möchtet so sieht dazu die Config wie folgt aus. Hier am Beispiel des Catalog Model Mage_Catalog_Model_Config welches durch die neu angelegte Klasse Namespace_Catalog_Model_Config erweitert wird, welche im neu angelegten Module Ordner unter /app/code/local/Namespace/Catalog/Model/Config.php abgelegt ist ):
<?xml version="1.0"?>
<config>
<modules>
<Namespace_Catalog>
<version>0.0.1</version>
</Namespace_Catalog>
</modules>
<global>
<models>
<catalog>
<rewrite>
<config>Namespace_Catalog_Model_Config</config>
</rewrite>
</catalog>
</models>
</global>
</config>
Magento: Alle aktiven Sprachen anzeigen / show Available Languages
$availLangs = Mage::getStoreConfig('general/locale/available_languages');
if (!is_array($availLangs)) {
$availLangs = explode(',', $availLangs);
}
Magento: Liste aller verfügbaren Länder / show list of available countries
if (!$countryCollection) {
$countryCollection = Mage::getModel('directory/country_api')->items();
}
foreach($countryCollection as $country) {
var_dump($country);
}
Magento: Filter Attribute erweitern / entfernen (Filter List on Product/Category/Search List)
// $this = Mage_Catalog_Block_Product_List_Toolbar
$this->addOrderToAvailableOrders('price', $this->__('Price'));
// $this = Mage_Catalog_Block_Product_List_Toolbar
// remove attribute
$this->removeOrderFromAvailableOrders('price');
Im Editor Path setzen
{{store direct_url='datenschutzerklaerung'}}
Get the current category name in Magento / Aktuellen Kategorie Namen in Magento ausgeben
Mage::registry('current_category')->getName();
Get the current category in Magento / Aktuellen Kategorie in Magento
Mage::registry('current_category');
Get the current category level in Magento / aktuell Ebene der Kategorie in Magento ausgeben
$currCat = Mage::registry('current_category');
echo $currCat->getLevel();
Display all sub-categories from the actual category in Magento / Unterkategorien der aktuellen Kategorie anzeigen in Magento ausgeben
$currCat = Mage::registry('current_category');
$_categories = Mage::getModel('catalog/category')->getCategories($currCat->getEntityId());
foreach($_categories as $_category)
echo $_category->getName();
Get Request Param
$this->getRequest()->getParam('website');
Daten auslesen / Filtern / Collection / getResourceModel
$collection = Mage::getResourceModel('sales/order_collection')
->addFieldToSelect('grand_total')
->addFieldToFilter('customer_id', Mage::getSingleton('customer/session')->getId());
$collection->load();
return $collection->getSize();
Index Management – Reindex starten aus php-script
// e.g. for flat-catalog 1
$mageFilename = '../app/Mage.php';
require_once $mageFilename;
$indexer = Mage::getSingleton('catalog/product_flat_indexer')->rebuild(1);
den Aktuell Block im Layout / Template ausgeben – get the current block name in layout
$this->getNameInLayout()
Variable von z.b. controller an Template übergeben
Variable definieren
// load xml layout
$this->loadLayout();
// load layout block
$this->getLayout()
->getBlock('block_name')
->setVariableName($value);
im template ruft ihr die variable ab mit
$this->getVariableName();
Zugriff auf die Config (config values in core_config_data table)
// e.g. the cookie domain value - enter the "path"-value from the "core_config_data table" in the database
Mage::getStoreConfig('web/cookie/cookie_domain')
Dabei ist egal ob die Paramter in der Datenbank oder in der config.xml hinterlegt ist.
Um die folgenden Werte aus der config.xml auszulesen …
<config>
<default>
<namespace_modulename>
<value>asdf</value>
</namespace_modulename>
</config>
</default>
… verwendet diesen PHP-Snipped:
Mage::getStoreConfig('namespace_modulename/value');
die aktuelle Action (ActionName) auslesen
// liefert als return zB. "new"
$this->getRequest()->getActionName());
Link in einer CMS-Page setzen
// z.b. zur Kontakt-Seite
{{store url='contacts'}}
load parent category by product id / Hauptkategorie anhand der Produkt ID laden in Magento
if(!empty($_product)) {
$_categories = Mage::getModel('catalog/product')
->load($_product)
->getCategoryCollection()
->addAttributeToSelect('name')
->addAttributeToFilter('level', 2);
foreach ($_categories as $_category) {
// get parent category name
echo Mage::getModel('catalog/category')->load($_category->getId())->getName();
// get parent category id
echo Mage::getModel('catalog/category')->load($_category->getId())->getId();
}
}
load current currency code in magento / aktuelle Währungs Kürzel des Stores in Magento auslesen
$baseCurrencyCode = Mage::app()->getStore((int)$this->getParam('store'))->getBaseCurrencyCode();
The current url of the page you are in magento / die aktuelle Seiten URL in Magento
$currentUrl = $this->helper('core/url')->getCurrentUrl();
function to get the real country name of a country-code (e.g. ‚gb‘) set in store-view as code
public function get_country_name()
{
// Mage::app()->getWebsite()->getCode() is 'gb'
$collection = Mage::getModel('directory/country')->loadByCode(Mage::app()->getWebsite()->getCode());
return Mage::app()->getLocale()->getCountryTranslation($collection->getId());
}
get country name for country code (e.g. ‚gb‘ or ‚de‘)
$countryName = Mage::getModel('directory/country')->load('gb')->getName();
Attribute & Entity hinzufügen, EAV-Model erweitern in Magento
Ausführliche Infos zu diesem Punkt im Magento Wiki
get product type in Magento
$_product->getTypeId();
isXmlHttpRequest
// $this = Mage_Core_Controller_Request_Http
$this->getRequest()->isXmlHttpRequest();
Getting the Secure (HTTPS) url for Magento
// first opportunity
Mage::getUrl('datacargofactory', array('_secure'=>true)
// second opportunity about the config
Mage::getStoreConfig('web/secure/base_url')
Check Magento Shop Url is Currently Secure
// return true or false
Mage::app()->getStore()->isCurrentlySecure();
Add customer attribute in Magento
$customer = Mage::getModel('customer/customer')->load($customerId);
$customer->setAttributeName($value);
$customer->save();
get current time in Magento / aktuelle Zeit in Magento
$now = Mage::getModel('core/date')->timestamp(time());
get products collection by category in Magento
$productCollection = Mage::getResourceModel('catalog/product_collection')
->addCategoryFilter($category);
show sql select statement from collection
$collection->getSelect()->__toString();
get magento root path / magento root pfad ausgeben
echo Mage::getRoot();
get magento base path / magento base pfad ausgeben
echo Mage::getBaseDir();
load magento store view / magento store view laden
Mage::app()->getStore()->load(0);
load customer greater than customer_id 5 / magento Kunden laden ab Kunden-ID 5
$customerItemsCollection = Mage::getModel('customer/customer')->getCollection()
->addAttributeToFilter('entity_id', array('gt' => 5))
->getAllIds();
get magento store url
Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB)
save current product url in session / get current product url
$productId = (int) $this->getRequest()->getParam('id');
$product = Mage::getModel('catalog/product')->load($productId);
if($productId != '' && !empty($product)) {
Mage::getSingleton('customer/session')->setBeforeReviewRegUrl($product->getProductUrl());
}
beliebige tempaltes einbinden über xml config files in Magento
<fly2mars_catalog_order>
<remove name="right"/>
<remove name="left"/>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
<reference name="content">
<block type="core/template" name="catalog.order" template="fly2mars/catalog/order.phtml"/>
</reference>
</fly2mars_catalog_order>
<fly2mars_newsletter_subscribe>
<remove name="right"/>
<remove name="left"/>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
<reference name="content">
<block type="core/template" name="catalog.order" template="fly2mars/newsletter/subscribe.phtml"/>
</reference>
</fly2mars_newsletter_subscribe>
alternativ nur einbinden einer phtml-datei in den header
<default>
<reference name="head">
<block type="core/template" name="marin_tracking" template="fly2mars/tracking.phtml" />
</reference>
<default>
get cms/page collection with filter in magento /cms/page collection mit filter in magento abfrage
$this->_cmsPaqgesCollection = Mage::getModel('cms/page')->getCollection()->addStoreFilter(Mage::app()->getStore()->getId());
$this->_cmsPaqgesCollection->getColumnValues('page_id');
$this->_cmsPaqgesCollection->getColumnValues('title');
$this->_cmsPaqgesCollection->getSelect()->where('page_id=5' );
foreach ($this->_cmsPaqgesCollectiona as $page) {
$PageData = $page->getData();
}
current url with(out) param or store code in url / canonical url / current cms url
$currentUrl = Mage::getUrl('', array(
'_current' => false,
'_use_rewrite' => true,
'_secure' => true,
'_store' => $storeId,
'_store_to_url' => false
));
get store home url / URL der Store Startseite in Magento
echo Mage::helper('core/url')->getHomeUrl();
get create date of a product in magento/ Produkt Erstellungsdatum eines Produktes in Magento
echo $product->getCreatedAt(); // get create date
echo $product->getUpdatedAt(); // get update date
rewrite magento resource-model / Magento Resource Model überschreiben
<config>
<global>
<models>
<sitemap_resource>
<rewrite>
<sitemap>Fly2marsmedia_Sitemap_Model_Resource_Sitemap</sitemap>
</rewrite>
</sitemap_resource>
</models>
</global>
</config>
Get full merged config.xml in magento / In Magento die final erzeugte config.xml ausgeben
Die einzelnen Module enthalten jeweils diverse config.xml-Dateien. Diese werden final von Magento zu einer einzigen config-xml-datei zusammen gefügt. Diese könnt ihr euch mit folgendem PHP-Code ausgeben lassen:
Mage::log(Mage::app()->getConfig()->getNode()->asNiceXml(), Zend_Log::DEBUG, "config-xml.log");
Magento SQL: Get attribute_id and update value from eav with sql select
SELECT * FROM eav_attribute WHERE entity_type_id=10;
UPDATE catalog_product_entity_varchar SET value="new page layout" WHERE attribute_id=929;
// entity_id = product id
select * from catalog_product_entity_int WHERE attribute_id=929 AND `store_id`=2 AND `entity_id`=158
Magento config.xml: rewrite an adminhtml controller
<config>
<admin>
<routers>
<fly2marsmedia_customer>
<use>admin</use>
<args>
<module>fly2marsmedia_customer</module>
<frontName>fly2marscustomer</frontName>
</args>
</fly2marsmedia_customer>
<adminhtml>
<args>
<modules>
<fly2marsmedia_customer before="Mage_Adminhtml">fly2marsmedia_customer_Adminhtml</fly2marsmedia_customer>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
Blöcke überschreiben / overwrite blocks
Blöcke werden in Magento wie folgt überschrieben:
Die Klasse (Datei) in ein neuen Namespace kopieren, dort die klasse entsprechend umbenennen.
In der config.xml des neuen Modules gebt ihr folgendes an:
<global>
<blocks>
<fly2marsmedia_review>
<class>Fly2marsmedia_Review_Block</class>
</fly2marsmedia_review>
</blocks>
</global>
Unbedingt die entsprechende Layout-XML unter app/design/template-path/layout/ anpassen, so dass der neue geänderte
block bei „type“ eingetragen wird.
z.b.
<block type=“review/product_view“ name=“product.info“ template=“catalog/product/view.phtml“>
ändern zu
<block type=“fly2marsmedia_review/product_view“ name=“product.info“ template=“catalog/product/view.phtml“>
Magento Function to check if is referred from customer last order area
/**
* check if page is reffered from the customer account (last orders)
*
* @return true|false
*/
public function isReferredFromCustomerAccount()
{
$refererUrl = $this->getRequest()->getServer('HTTP_REFERER');
if (strpos(strtolower($refererUrl), strtolower('sales/order/view/order_id')) !== false
) {
return true;
} else {
return false;
}
}