Banner - Blog zu den Themen Programmierung, SEO, SEM, Social Media, Internet Marketing, Webdesign, IT-Service und Mehr - SEO Hannover - IT-Dienstleistungen und SEO Agentur Fly2Mars-Media.de

Archiv

Archiv für die Kategorie ‘PHP’

XDebug auf Zend Server CE (Community Edition) unter Windows einrichten (mit PHP 5.2)

zend logoZwar ist ZendDebugger beim Zend-Server integriert, allerdings habe ich ihn mit phpStorm nicht zum laufen bekommen, von d.h. hier ein kurzes HowTo wie ihr xDebug in ZendServer integrieren könnt:

Ladet die Datei php_xdebug-2.1.1-5.2-vc6-nts.dll (ggf. höhere Version, nts-version ist für die non-thread-saved apache – version … phpinfo erkennt ihr welche Version ihr benötigt, alternativ testen ;-) von http://xdebug.org/files/ und packt sie in das entsprechende Verzeichnis, z.b. C:\Program Files\Zend\ZendServer\lib\phpext

Wenn ihr XDebug einsetzt, müsst ihr vorher den Zend Debugger deaktiviert, das geht über die Zend-Server Adminoberfläche wie folgt::

  1. Login auf der Benutzeroberfläche: http://localhost/ZendServer
  2. zum Reiter Server Setup wechseln
  3. Den Zend Debugger durch Klick auf den Button Turn off deaktivieren
  4. PHP neu starten (Button rechts unten)

Jetzt noch in der php.ini xdebug einbinden (liegt unter C:\Programme\Zend\ZendServer\etc):

zend_extension=”C:\Program Files\Zend\ZendServer\lib\phpext\php_xdebug-2.1.1-5.2-vc6-nts.dll”
zend_extension=”C:\Program Files\Zend\ZendServer\lib\ZendExtensionManager.dll”

Achtung: ZendExtensionManager.dll darf nur nach der php_xdebug.dll eingebunden werden!

Jetzt noch Server neu starten und xdebug sollte verfügbar sein. Prüft dazu die phpinfo ob xdebug dort auftaucht!

GD Star Rating
loading...
GD Star Rating
loading...

Magento: system.xml um weitere Felder erweitern – Daten-Typen

Folgende Typen / Möglichkeiten gibt es in Magento um im Backend Datums-Typen Anzuzeigen (weg über system.xml):

<use_calendar translate="label">
<label>Use JavaScript Calendar</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_yesno</source_model>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</use_calendar>
<date_fields_order translate="label">
<label>Date Fields Order</label>
<frontend_type>select</frontend_type>
<frontend_model>adminhtml/catalog_form_renderer_config_dateFieldsOrder</frontend_model>
<sort_order>2</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</date_fields_order>
<time_format translate="label">
<label>Time Format</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_catalog_timeFormat</source_model>
<sort_order>3</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</time_format>
<year_range translate="label comment">
<label>Year Range</label>
<comment>Use four-digit year format.</comment>
<frontend_type>text</frontend_type>
<frontend_model>adminhtml/catalog_form_renderer_config_yearRange</frontend_model>
<sort_order>4</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</year_range>
GD Star Rating
loading...
GD Star Rating
loading...
KategorienMagento, PHP, Programmierung Tags: ,

Vergleich: ZendStudio 8 / Eclipse vs. PhpStorm 2.1

Seit vielen Jahren nutze ich mehr oder weniger zufrieden Eclipse mit entsprechenden Plugins zur PHP & Java-Entwicklung als PHP-IDE. In letzter Zeit bin ich immer unzufriedener mit ZendStudio und Eclipse aufgrund schlechter bis sehr schlechter Performance bei der Suche, Indexierung, SVN-Update, Diffs, eigentlich bei allem ist die Performance von ZendStudio sowie auch Eclipse schlecht.

Im Vergleich ist meine neue Wahl-IDE PhpStorm sehr schnell. Die Ergebnisse bei einer suche sind fast sofort verfügbar, bei ZendStudio/Eclipse können live die abgeschlossenen Such-Prozente hoch gezählt werden …

What ever, hier eine kurze Zusammenfassung der mir aufgefallenen Pro- & Contras (gerne könnt ihr eure Erfahrungen als Kommentar hinterlassen und ich passe ggf. den Artikel an):

ZendStudio / Eclipse

Pro

  • Usability / Benutzeroberfläche ist beliebig skalierbar und wirkt sehr übersichtlich (ggf. auch aufgrund langjähriger Gewohnheit)
  • ZendFramework ist integriert
  • Es gibt diverse Plugins
  • Auch für andere Sprachen wie z.B. Java verwendbar / optimiert (ggf. durch Plugins)
  • Es können beliebig viele Projekte gleichzeitig geöffnet werden
  • SVN Support sehr gut

Contra

  • Performance (Suche, Compare, etc. ist sehr langsam)
  • Speicherverbrauch (sehr hoch, gerne schnappt sich die IDE mal über 1GB an Arbeitsspeicher)
  • Das Beenden der IDE dauert teilweise bis zu 5 Minuten (sehr langsame History-Kompression)

PhpStorm

Pro

  • Performance (Suche, Compare, etc. ist sehr schnell)
  • Speicherverbrauch sehr niedrig (bei Bedarf kann so gar durch einen klick der aktuell reservierte Speicher auf Null gesetzt werden)

Contra

  • Prozesse lassen sich nicht gut beenden, z.b. “scanning files” lässt sich zwar “Abbrechen”, allerdings läuft der Prozess beliebig lange weiter
  • Es kann nur ein Projekt gleichzeitig geöffnet werden
  • Tastenkürzel sind teilweise nicht Standard-Kürzel (z.b. Tab schließen nicht STRG + W, etc.)
    Es können zwar Layouts gewählt werden, z.b. “Eclipse-Layout”, allerdings sind auch dann nicht alle oder die richtigen Eclipse-Tastenkürzel zu nutzen (Bug ?)
  • Der Compare-Editor ist unübersichtlich, alle geänderten Dateien werden in einer Liste angezeigt, Ordner lassen sich nicht zusammenfassen (browsen), bei größeren Projekten sehr unübersichtlich
  • Bei einem Compare mit einem anderen Branche lassen sich angezeigte Änderungen nicht über dem Compare-Editor übernehmen, Read-Only – wo ist da der Sinn?
  • SVN Support, primär die Funktionalität & Usability nicht so detailiert wie in Eclipse/ZendStudio

Update 25.07.11:

Mein erstes Resumé nach einer Woche Umstieg von Eclipse/ZendStudio zu PhpStorm ist ein wenig ernüchternd.
PhpStorm punktet weiterhin ganz klar im Bereich der Performance, dadurch effektiveres Arbeiten (Eclipse/ZendStudio ist leider wirklich sehr sehr langsam). Die Usability in PhpStorm ist im Gegensatz zu Eclipse eher schlecht bzw. unausgereift oder nicht klar überdacht. Oft wird sich nicht an gesetzte Oberflächen-Standards gehalten, bei Tastenkürzel funktionieren ebenfalls keine Standard-Kürzel. Einige Eingabe oder Ausgabemasken sind schlecht gestaltet, da muss dringend noch nach gebessert werden.  Aufgrund der besseren Performance bereue ich den Umstieg allerdings nicht, an die Benutzeroberfläche muss ich mich noch gewöhnen und hoffe dass die Usability bei zukünftigen Updates verbessert wird.

GD Star Rating
loading...
GD Star Rating
loading...

ZendFramework: Datenbankabfrage / SQL Abfrage mit ZendFramework & Magento

Mit dem folgenden Code-Schnippsel könnt ihr einfach eine sql-abfrage über zend in magento starten.

More information: framework.zend.com/manual/de/zend.db.select.html

$table = array('table_name);
$selectCol = array('table_id' , 'col_two');
$where = 'col_two >= ?';  // ? wird ersetzt mit zweitem wert in der where bedingung
$order = '';
$connection = Mage::getSingleton('core/resource')->getConnection('core_read');
$select = $connection->select()
->from($table, $selectCol)
->where($where, $this->lastExportDate)
->order($order);
echo $select->__toString();  // die komplette sql-abfrage ausgeben lassen
$result = $connection->fetchAll($select);

 

 

GD Star Rating
loading...
GD Star Rating
loading...

Magento: Category & Store Group & Store View über Setup Script anlegen

magento ecommerce logo

Der folgende Script zeigt wie automatisiert über ein PHP-Setup-Script in Magento eine Category angelegt werden kann, welche dann als Default-Category einer neuen Store-Group zugewiesen wird, welche samt einer neuen Store-View angelegt wird.

$installer = $this;
$installer->startSetup();
				$data = array(
								'name' 							=> 'New Category',
								'url_key'    				=> 'root', //'de',
				      	'description' 			=> 'test category',
				      	'meta_description' 	=> 'test category',
								'meta_keywords'			=> 'categories_meta',
								'display_mode'      => Mage_Catalog_Model_Category::DM_PRODUCT,
								'default_sort_by'   => Mage::getModel("catalog/category")->getDefaultSortBy(),
				      	'available_sort_by' => Mage::getModel("catalog/category")->getDefaultSortBy(),
				      	'is_active'					=> 1,
						    'is_anchor'         => 0,
						    'include_in_menu'   => 0,
						    'parent_id'         => 1,
						    'path'              => 1, //Mage::getModel("catalog/category")->load(1)->getPath(),
						    'attribute_set_id'  => Mage::getModel("catalog/category")->getDefaultAttributeSetId(),
								'display_mode'	=> array( '0' => 'show_products'),
								'custom_design_apply' => 1
				        );
				Mage::app()->getStore()->load(0);
				$cat = Mage::getModel('catalog/category');
				$cat->addData($data);
				$parentId = Mage_Catalog_Model_Category::TREE_ROOT_ID;
			  $parentCategory = Mage::getModel('catalog/category')->load($parentId);
			  $cat->setPath($parentCategory->getPath());
			//	$cat->setStoreId(Mage::app()->getStore()->getId());
				$cat->setStoreId(0);
				$cat->setAttributeSetId($cat->getDefaultAttributeSetId());
				try {
				    $cat->save();
				    $newCategoryId = $cat->getId();
				} catch (Exception $e) {
				    Mage::logException($e->getMessage());
				    return;
				}
			}
		if($newCategoryId != '') {
			$groupModel = Mage::getModel('core/store_group');
	    $group = array(
	        'website_id' => 1,
	        'name' => 'New Store Gropu',
	        'root_category_id' => $newCategoryId,
	    );
	    $groupModel->setData($group);
	    $groupModel->setId(null);
	    $groupModel->save();
	    Mage::dispatchEvent('store_group_save', array('group' => $groupModel));
	    $storeModel = Mage::getModel('core/store');
	    $store = array(
	        'group_id' => $groupModel->getId(),
	        'name' => 'New Store',
	        'code' => 'new_store',
	        'is_active' => 1,
	        'sort_order' => 2,
	    );
	    $storeModel->setData($store);
	    $storeModel->setId(null);
	    $eventName = 'store_add';
	    $groupModel = Mage::getModel('core/store_group')->load($storeModel->getGroupId());
	    $storeModel->setWebsiteId($groupModel->getWebsiteId());
	    $storeModel->save();
	    Mage::app()->reinitStores(); // or Mage::app()->getConfig()->reinit();
	    Mage::dispatchEvent($eventName, array('store'=>$storeModel));
		}
$installer->endSetup();
$installer->installEntities();
$installer = $this;
$installer->startSetup(); 

$mobileCategory = Mage::getModel(‘catalog/category’)->getCollection()
->addAttributeToSelect(‘id’)
->addAttributeToFilter(‘name’, ‘mobile’)
->addAttributeToSort(‘id’, ‘ASC’)
->distinct(true)
->load();

$mobileCategoryId = ”;
if(count($mobileCategory) > 0) {
foreach ($mobileCategory as $value) {
$mobileCategoryId = $value->getId();
}
} else {
$data = array(
‘name’                             => ‘Mobile’,
‘url_key’                    => ‘root’, //’de’,
‘description’             => ‘test category’,
‘meta_description’     => ‘test category’,
‘meta_keywords’            => ‘categories_meta’,
‘display_mode’      => Mage_Catalog_Model_Category::DM_PRODUCT,
‘default_sort_by’   => Mage::getModel(“catalog/category”)->getDefaultSortBy(),
‘available_sort_by’ => Mage::getModel(“catalog/category”)->getDefaultSortBy(),
‘is_active’                    => 1,
‘is_anchor’         => 0,
‘include_in_menu’   => 0,
‘parent_id’         => 1,
‘path’              => 1, //Mage::getModel(“catalog/category”)->load(1)->getPath(),
‘attribute_set_id’  => Mage::getModel(“catalog/category”)->getDefaultAttributeSetId(),
‘mdm_display_mode’    => array( ’0′ => ‘show_products’),
‘custom_design_apply’ => 1
);

Mage::app()->getStore()->load(0);
$cat = Mage::getModel(‘catalog/category’);
$cat->addData($data);
$parentId = Mage_Catalog_Model_Category::TREE_ROOT_ID;
$parentCategory = Mage::getModel(‘catalog/category’)->load($parentId);
$cat->setPath($parentCategory->getPath());
//    $cat->setStoreId(Mage::app()->getStore()->getId());
$cat->setStoreId(0);
$cat->setAttributeSetId($cat->getDefaultAttributeSetId());

try {
$cat->save();
$mobileCategoryId = $cat->getId();

} catch (Exception $e) {
Mage::logException($e->getMessage());
return;
}
}

if($mobileCategoryId != ”) {
$groupModel = Mage::getModel(‘core/store_group’);
$group = array(
‘website_id’ => 1,
‘name’ => ‘Mobile’,
‘root_category_id’ => $mobileCategoryId, // 119

);

$groupModel->setData($group);
$groupModel->setId(null);
$groupModel->save();

Mage::dispatchEvent(‘store_group_save’, array(‘group’ => $groupModel));

$storeModel = Mage::getModel(‘core/store’);

$store = array(
‘group_id’ => $groupModel->getId(),
‘name’ => ‘Mobile’,
‘code’ => ‘mobile’,
‘is_active’ => 1,
‘sort_order’ => 2,
);
$storeModel->setData($store);
$storeModel->setId(null);
$eventName = ‘store_add’;

$groupModel = Mage::getModel(‘core/store_group’)->load($storeModel->getGroupId());
$storeModel->setWebsiteId($groupModel->getWebsiteId());
$storeModel->save();

Mage::app()->reinitStores(); // or Mage::app()->getConfig()->reinit();

Mage::dispatchEvent($eventName, array(‘store’=>$storeModel));
}

$installer->endSetup();
$installer->installEntities();

GD Star Rating
loading...
GD Star Rating
loading...
KategorienMagento, PHP, Programmierung Tags: , ,

Magento: Per PHP Setup Script neue Store View anlegen

Per PHP Script eine neue Store View über z.B. Setup-Install-Script anlegen?
So geht’s:

$storeModel = Mage::getModel('core/store');
 $store = array(
 'group_id' => 1,
 'name' => 'New Store Name',
 'code' => 'store_xy',
 'is_active' => 1,
 'sort_order' => 2,
 );
 $storeModel->setData($store);
 $storeModel->setId(null);
 $eventName = 'store_add';
 $groupModel = Mage::getModel('core/store_group')->load($storeModel->getGroupId());
 $storeModel->setWebsiteId($groupModel->getWebsiteId());
 $storeModel->save();
 Mage::app()->reinitStores(); // or Mage::app()->getConfig()->reinit();
 Mage::dispatchEvent($eventName, array('store'=>$storeModel));
GD Star Rating
loading...
GD Star Rating
loading...

Magento: Artikel filtern nach bestimten Parametern

Artikel könnt ihr wie folgt nach bestimmten Parametern filtern. Folgendes Beispiel zeigt die Filterung anhand des Preises aus bestimmten Unterkategorien:

<?php
$model = Mage::getModel('catalog/product');     // Direktzugriff auf Produkt als Methode
$collection = $model -> getCollection();    //Zugrif auf Eigenschaft
$collection -> addAttributeToSelect('name');    //Attributaktivierung - Name
//$collection  -> load();                      //Zeigt alle Artikel
$collection -> addFieldToFilter('price',array('from'=>'0','to'=>'40')); //Filtert alle Artikel von 0 bis 40€.
$collection -> getSelect();
$collection -> setOrder('price', 'ASC');
?>
<ul><?php foreach($collection as $product) : ?>
 <li>
 <?php echo $product ->getPrice(); echo "&euro; - "; ?>
 <?php echo $product ->getName(); echo " - ";?>
 <?php echo $product ->getColor(); echo " ";?>
 </li>
<?php  endforeach; ?>
</ul>
GD Star Rating
loading...
GD Star Rating
loading...
KategorienMagento, PHP, Programmierung Tags: ,

Magento: Session Success or Failure Message after redirect – Magento HowTo

27. April 2011 1 Kommentar

Add a Success, Info or Error Message to the session and save this for re-direction in Magento

//A Success Message
 Mage::getSingleton('checkout/session')->addSuccess("Your cart has been updated successfully!");
 //A Error Message
 Mage::getSingleton('checkout/session')->addError("Your cart has been updated successfully!");
 //A Info Message (See link below)
 Mage::getSingleton('checkout/session')->addNotice("This is just a FYI message...");
 //These two lines are required to get it to work
 session_write_close(); //THIS LINE IS VERY IMPORTANT!
 $this->_redirect('checkout/cart');
GD Star Rating
loading...
GD Star Rating
loading...

Magento: PHP-Code in Content-Seiten (CMS) einbinden – HowTo

26. April 2011 1 Kommentar

Aus Sicherheitsgründen ist es nicht gestattet in Magento-CMS-Pages direkt PHP-Code einzubinden.

Über dem folgenden Weg ist dies möglich:

Im Template Ordner muss dazu eine Datei zum einbinden vorhanden oder angelegt werden. Z.B. die test.phtml welche im Ordner  /app/design/frontend/default/default/test/test.phtml abgelegt wird.

In dieser Datei kann, wie in den phtml-template-files üblich, php-code aufgerufen werden, z.b.:

<strong><?php echo "Hello World"; ?></strong>

In der CMS-Page ruft ihr diese Template-Datei wie folgt auf:

{{block type="core/template" template="test/test.phtml"}}
GD Star Rating
loading...
GD Star Rating
loading...

Magento: Attribute zur Checkout-Quote hinzufügen

Zuerst muss in der Datenbank die Quote Tabelle entsprechend mit dem neuen Attribute erweitert werden, dies geht wie gewohnt über die setup-scripte (z.B. mysql4-install-0.0.X.php):

$installer = $this;
$installer->startSetup();
$installer->addAttribute('quote', 'new_attribute', array(
 'label'                        => 'New Attribute',
 'type'                        => 'varchar',
));
$installer->endSetup();

Danach könnt ihr, z.b. im OnepageController.php dieses Attribute wie folgt mit Werten füllen:

Mage::getSingleton('checkout/session')->getQuote()->setNewAttribute('value');
 Mage::getSingleton('checkout/session')->getQuote()->collectTotals();
 Mage::getSingleton('checkout/session')->getQuote()->save();

Be careful on input and type. Input means the input type of the attribute. And type means the input type in database.

For textfield it will be:
'input' => 'text',
'type' => 'text',

For textarea it will be:
'input' => 'textarea',
'type' => 'text',

For date field it will be:
'input' => 'date',
'type' => 'datetime',

For select list it will be:
'input' => 'select',
'type' => 'text',

For boolean select it will be:
'input' => 'boolean',
'type' => 'int',

GD Star Rating
loading...
GD Star Rating
loading...