Eigene Plugins in PHPStorm einbinden – z.b. den Magento Cache über PHPStorm löschen

3. Dezember 2013 at 13:30

php code

In PHPStorm ist es möglich eigene Menüpunkte anzulegen und für diese(n) Befehle zu hinterlegen.

Ein nützlich Beispiel ist z.b. den Shell-Code für das löschen des Magento-Caches zu hinterlegen.

So geht’s:

  1. In PHP-Storm im Menü „File/Einstellungen“ wählen.
  2. Unter „external tools“ (einfach danach suchen) könnt ihr ein neuen Eintrag hinzufügen,
    z.b.: alias clear-magento-cache=“rm -Rf var/cache/mage–*“
  3. Im Menü unter „Tools -> Magento -> Clear Magento Cache“ findet ihr nun den entsprechenden Eintrag

Das war’s schon.

Wenn euch der Tipp geholfen hat, bitte diesen Artikel auch bei Google+ und Facebook teilen, danke für euren Support!

 

Magento: Change Attribute Type – Select to Multiselect

13. September 2013 at 17:51

Ihr möchtet den Attribute Type von Select auf Multiselect ändern?

so geht’s

$installer = $this;
$this->startSetup();
//$installer->updateAttribute('catalog_product', 'attributename', array('type' => 'varchar', 'input' => 'multiselect'));
$entityTypeId = $installer->getEntityTypeId('catalog_product', 'attributename');
$idAttributeOldSelect = $this->getAttribute($entityTypeId, 'attributename', 'attribute_id');
$installer->updateAttribute($entityTypeId, $idAttributeOldSelect, array(
    'frontend_input' => 'multiselect',
    'backend_type' => 'varchar'
));
$this->endSetup();

Magento Problem:catalog/product_collection wird mit falscher Store-ID-Flat-Table geladen – hier die Lösung

24. Juli 2013 at 14:00

Solltet ihr in Magento die Collection „catalog/product_collection“ in einer Schleife laden wollen und jeweils die store-id ändern, so erhaltet ihr eine falsche flat-table zurück (immer die des ersten geladenen stores.

Die Lösung: Vorher auf dem ResourceSingleton jeweils noch mal explizit mit setStoreId die ID des aktuellen stores setzen, hier der Quellcode dazu:

        Mage::getResourceSingleton("catalog/product_flat")->setStoreId($store->getId());
        $products = Mage::getResourceModel("catalog/product_collection")
            ->setStoreId($store->getId())
            ->addStoreFilter($store->getId());

War der Tipp für euch hilfreich?
Dann gibt ihn doch ein +1 oder like bzw. teilt diesen Artikel bei Google+ oder Facebook!

Danke für euren Support!

In Magento die final erzeugte config.xml ausgeben / Get full merged config.xml in magento

28. Mai 2013 at 15:21

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");

War der Tipp für euch hilfreich?
Dann gibt ihn doch ein +1 oder like bzw. teilt diesen Artikel bei Google+ oder Facebook!

Danke für euren Support!

Magento: Liste aller Events der aktuell geladenen Seite in eine Log-File ausgeben.

28. Mai 2013 at 14:34

magento ecommerce logo

Bei der Entwicklung bzw. der Erweiterung bestehender Methoden, ist es oft hilfreich eine Übersicht aller aktuell geladenen Events einer bestimmten Seite zu erhalten.

So erhaltet ihr eine Liste der Events der aktuell geladenen Seite

In der Funktion public static function dispatchEvent($name, array $data = array())“ in der Datei“/app/Mage.php“ fügt ihr folgenden Code ein:

file_put_contents('var/log/magento-events.log'
 , date('Y-m-d H:i:s', time()) . ' - '
 . (isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'CLI') . ' - '
 . (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $_SERVER['SCRIPT_FILENAME']) . ' - '
 . $name . chr(10),
 FILE_APPEND);

Nach dem neuladen der Seite findet ihr eine entsprechende Auflistung in der Datei var/log/magento-events.log .

War der Tipp für euch hilfreich?
Dann gibt ihn doch ein +1 oder like bzw. teilt diesen Artikel bei Google+ oder Facebook!

Danke für euren Support!

Magento: Was man alles mit Kategorien machen kann … – Categories in magento

20. Februar 2013 at 13:31

Kategorie neu laden anhand vorhandener Kategorie-ID

$category = Mage::getModel('catalog/category')->load(12);

Unterkategorien der Kategorie erhalten

$category->getChildren();

Beliebige Werte der aktuellen kategorie erhaltet ihr mit z.b.

$category->getId(); // the cat id
$category->getName(); // cat name
$category->getLevel(); // cat level
$category->getParentCategories(); // get parent categories

Den Kategorien Pfad im Store zur aktuellen Kategorie anzeigen lassen geht mit

$category->getPathInStore();

Alle Hauptkategorien (unterhalb der 0-Level-Default-Kategorie) anzeigen lassen

    public function getParentTopCategory($category = null)
    {
        if(is_null($category)) {
            return $category;
        }
        if($category->getLevel() == 2){
            return $category;
        } else {
            $parentCategory = Mage::getModel('catalog/category')->load($category->getParentId());
            return $this->getParentTopCategory($parentCategory);
        }
    }

Magento: Funktion zur Erzeugung der „markup for multilingual content“-Link-Tags

22. Januar 2013 at 17:53

Die folgende Funktion erzeugt euch für die einzelnen Stores bei Mehrsprachigkeit dieser ein Array mit den Markup-Links für Multilingual content:

public function countryStoresAlternateLinks()
{
/*      e.g.
<link rel="alternate" hreflang="es" href="http://www.example.com/" />
<link rel="alternate" hreflang="es-ES" href="http://es-es.example.com/" />
<link rel="alternate" hreflang="es-MX" href="http://es-mx.example.com/" />
<link rel="alternate" hreflang="en" href="http://en.example.com/" />
*/
$stores = Mage::app()->getStores(false);
if (!$stores) {
return false;
}
$countryAlternateLinks = '';
foreach($stores as $store) {
$countryAlternateLinks[] = '<link rel="alternate" hreflang="' . substr(Mage::getStoreConfig('general/locale/code', $store->getId()), 0, 2) . (Mage::getStoreConfig('general/country/default', $store->getId()) != '' ?  "-" . Mage::getStoreConfig('general/country/default', $store->getId()) : '') .  '" href="' . $store->getBaseUrl() . '" />' . "\n";
}
return $countryAlternateLinks;
}

Die erzeugte Liste könnt ihr dann entsprechend im Template verarbeiten/ausgeben.

Idealerweise solltet ihr die Funktion in eine erweiterte Klasse der Mage_Page_Block_Html_Head packen.

Magento: Standard Weiterleitung mit 302 ändern zu einer 301 Weiterleitung (SEO)

17. Januar 2013 at 10:30

Magento leitet interne Links per 302-Status-Code weiter. Das ist in Bezug auf Suchmaschinenoptimierung nicht gerade optimal, besser wäre eine 301-Weiterleitung.

Um das zu ändern sollte beim Aufruf der Funktion „_redirect“ jeweils als zweiten Parameter der korrekte Status-code „301“ mit gegeben werden, da ansonsten der Default-Parameter „302“ verwendet wird.

Siehe: /app/code/core/Mage/Core/Controller/Response/Http.php :

/**
* Additionally check for session messages in several domains case
*
* @param string $url
* @param int $code
* @return Mage_Core_Controller_Response_Http
*/
public function setRedirect($url, $code = 302)
{
/**
* Use single transport object instance
*/
if (self::$_transportObject === null) {
self::$_transportObject = new Varien_Object;
}
self::$_transportObject->setUrl($url);
self::$_transportObject->setCode($code);
Mage::dispatchEvent('controller_response_redirect',
array('response' => $this, 'transport' => self::$_transportObject));
return parent::setRedirect(self::$_transportObject->getUrl(), self::$_transportObject->getCode());
}

Um das über ein Magento-Event zu lösen, geht wie folgt vor:

Erstellt ein neues Module und erweitert die config.xml mit folgendem xml-snippet, z.B. in der /app/code/local/Neuesmodul/Cms/etc/config.xml

<global>
<events>
<cms_controller_router_match_before>
<observers>
<Neuesmodul_Cms_observer_cmsControllerRouterMatchBefore>
<type>singleton</type>
<class>neuesmodul_cms/observer</class>
<method>
cmsControllerRouterMatchBefore
</method>
</Neuesmodul_Cms_observer_cmsControllerRouterMatchBefore>
</observers>
</cms_controller_router_match_before>
</events>
</global>

in /app/code/local/Neuesmodul/Cms/Model/Observer.php fügt ihr die folgende Funktion  ein:

/*
* set 301-Http-Response-Code for redirection
*/
public function cmsControllerRouterMatchBefore(Varien_Event_Observer $observer)
{
$condition = $observer->getEvent()->getCondition();
if ($condition->getRedirectUrl()) {
Mage::app()->getFrontController()->getResponse()
->setRedirect($condition->getRedirectUrl(), 301)
->sendResponse()
->setDispatched(true);
}
}

Alternativ-Funktion

/*
 * set 301-Http-Response-Code for redirection
 */
 public function cmsControllerRouterMatchBefore(Varien_Event_Observer $observer)
 {
 $condition = $observer->getEvent()->getCondition();
if ($condition->getIdentifier()) {
 Mage::app()->getFrontController()->getResponse()
 ->setRedirect('/', 301)
 ->sendResponse()
 ->setDispatched(true);
die();
 }
 }

Magento: Wie finde ich heraus ob ich auf der Startseite bin? – getIsHomePage

15. Januar 2013 at 15:12

Ihr möchtet an beliebiger Stelle in Magento im Quellcode prüfen ob ihr auf der Startseite seit oder nicht?

Die Lösung

$is_homepage = Mage::getBlockSingleton('page/html_header')->getIsHomePage();

in der header.phtml :

<?php
if($this->getIsHomePage()) {
echo 'You are in Homepage!';
} else {
echo 'You are NOT in Homepage!';
}
?>

an anderer Stelle:

<?php
$is_homepage = Mage::getBlockSingleton('page/html_header')->getIsHomePage();
if($is_homepage)
{
echo "You are on Homepage!";
} else {
echo "You are NOT on Homepage!";
}
?>
oder
<?php
$routeName = Mage::app()->getRequest()->getRouteName();
$identifier = Mage::getSingleton('cms/page')->getIdentifier();
if($routeName == 'cms' && $identifier == 'home') {
echo 'You are in Homepage!';
} else {
echo 'You are NOT in Homepage!';
}
?>

Eigene Shortcode in WordPress definieren

7. Dezember 2012 at 09:38

Ihr kennt das sicher, ihr wollt an beliebiger Stelle in WordPress irgend etwas einfügen und am liebsten aus einer Vorlage.
Das geht über Shortcode-Definitionen wie folgt:

Editiert die functions.php

In der functions.php fügt ihr eure eigene Funktion hinzu und definiert anschließend den Shortcut:

function myShortcutFunction()
{
echo '<p>ich bin ein text</p>';
}
add_shortcode('myshortcut', 'myShortcutFunction');

Jetzt könnt ihr den Shortcute im Artikel wie folgt aufrufen:

[myshortcut]

Das war’s! 😉