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

29. Juni 2011 at 11:12

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

Magento: Per PHP Setup Script neue Store View anlegen

28. Juni 2011 at 11:01

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

Linux: Nano Editor – Befehle / Tastenkürzel

23. Juni 2011 at 14:21

Mein Lieblingseditor unter Linux in der Bash ist ganz klar VI.
Leider kann es vorkommen das dieser z.b. über Putty mit falsch oder schlecht konfigurierter Bash/SSH dieser nicht genutzt werden kann da z.B. die Pfeiltasten nicht benutzbar sind … *sigh* (wer eine Lösung dafür hat, bitte mal in den Kommentaren posten).

What ever, eine gute Alternative ist z.B. Nano, dazu hier die wichtigsten Tastenkürzel:

Tastenkombination Erklärung
STRG + G / F1 Hilfe öffen
STRG + X / F2 Nano Schließen/Beenden
STRG + O / F3 Speichern
STRG + W / F6 Suchen nach einem String oder Regulären Ausdruck
STRG + K / F9 Zeile ausschneiden und in die Zwischenablage legen
STRG + U / F10 Zwischenablage einfügen
STRG + C / F11 Position des Cursors anzeigen
ALT + T Alles unter dem Cursor ausschneiden
ALT + M Maussupport aktivieren oder deaktivieren

Firefox: User Agent Switcher (mobile & SEO)

22. Juni 2011 at 09:53

Für Webentwickler ist es oft nützlich den User-Agent (Client / Browser / Device) zu ändern, um die Webseite auf anderen Geräten oder für z.b. Google Bot zu evaluieren. Da in der Regel nicht von alle möglichen Geräten (iPhone, Android, iPad, etc.) zum testen verfügbar sind und auch der Google-Bot nicht mal eben im Büro sitzt, sind entsprechende Emulatoren von Vorteil.

Eine gute Variante ist das User Agent Switcher Plugin für Firefox.

Nach der Installation kann bequem über ein Menü der gewünschte Client gewählt werden.

user-agent-switcher-firefox-plugin

Anonymus droht der GEMA aufgrund youTube

20. Juni 2011 at 12:33

Der Unmut über die teilweise mafiösen Machenschaften der GEMA und den derzeit geplatzten Verhandlungen zwischen youTube und der Gema sorgen immer mehr für Unmut bei Internet-Benutzern.

Die GEMA ist nie im Jahr 2011 bzw. Internet-Zeitalter angekommen und möchte weiterhin an ihrem undurchschaubaren, veralteten und nicht in der Realität für Verbraucher finanzierbarem Zahlungsmodell fest halten.

Die Hackergruppierung namenes Anonymus hat jetzt ein Drohvideo gegenüber der GEMA online gestellt, welches ihr hier sehen könnt:

Der Inhalt des Videos:

Sehr geehrte Gesellschaft für musikalische Aufführungs- und mechanische Vervielfältigungsrechte (GEMA),
Wir sind Anonymous. Wir beobachten mit Sorge eure überhöhten Forderungen bezüglich urheberrechtlich geschützem Material auf Youtube und anderen Plattformen dieser Art.
Das Resultat ist vielen YouTube-Nutzern hierzulande sicherlich bekannt. Beim Klick auf ein entsprechendes Musikvideo ist nur die Meldung „Leider ist dieses Video […] in Deutschland nicht verfügbar, da die GEMA die Verlagsrechte hieran nicht eingeräumt hat.“ zu lesen.
Anonymous empfindet dieses Vorgehen als eine Einschränkung des freien Informations flusses.
Sie weigern sich offenbar massiv dem Google-Unternehmen die nötigen Rechte einzuräumen, um bestimmte Musik- und Filmtitel in Deutschland zeigen zu dürfen.
Ihren überzogenen Forderungen kann und wird das Unternehmen Google nicht zustimmen können, da es nicht die benötigten Werbeeinnahmen generieren kann.
Wir haben keine Probleme damit, dass sie versuchen den Plattenfirmen und Künstlern einen Gewinn zu verschaffen. Dabei stehen sie sich aber selbst im Weg und dadurch auch den Künstlern.
Musiker brauchen YouTube Videos, das wissen mittlerweise sogar schon die Plattenfirmen.
Denn dies ist eine kostenlose Promotion auf die kein Musiker freiwillig verzichten möchte.
Wenn sich dieses Verhalten nich ändert, sehen wir uns gezwungen, weitere Maßnahmen einzuleiten.
Auch werden wir schon jetzt gewisse Tools verbreiten, mit denen wir es ermöglichen , dass auch gesperrte Video’s von den Nutzern angesehen werden können.
Der Link dazu befindet sich in der Beschreibung des Videos.
Dadurch möchten wir erreichen, dass mit Google eine schnelle Einigung stattfindet.

We are Anonymous.
We are Legion.
We do not forgive.
We do not forget.
Expect us!

Magento: Artikel filtern nach bestimten Parametern

17. Juni 2011 at 10:49

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>

Keine PopUnder im Firefox 4: Bug oder Feature?

6. Juni 2011 at 16:47

Webseitenbetreiber die Restplatzvermarktern wie z.b. Adscale und PopUnder einsetzen, werden es schon gemerkt haben. Im Firefox 4 gibt es kein PopUnder mehr bzw. diese verhalten sich identisch wie PopUps. Ist dies jetzt ein Fehler oder gewolltes Feature?

Es scheint als würde windows.focus() nicht dazu führen, dass das aktive Fenster auch aktiv bleibt:

var w = window.open('http://www.meinedomain.de', 'meinpopunder', 'width=400,height=300,toolbar=1,menubar=1,resizable=1,scrollbars=1');
if(w){
w.blur();
window.focus();
}

Dieses Problem wurde bereits im Mozilla-Forum aufgegriffen und die Entwickler scheinen sich bewusst dafür entschieden haben: In den Einstellungen des Firefox 4 lässt sich explizit einstellen ob sich Fenster fokussieren lassen (Einstellungen -> Inhalt ->JavaScript aktivieren -> Erweitert -> Fenster vor oder hinter andere Fenster legen).

Für den Benutzer hat das den Vorteil, dass er die (meistens als lästig empfundenen) Fenster sofort zumachen kann, ohne dass diese sich hinter dem Hauptfenster verstecken und u.U. die Geschwindigkeit drosseln (je nach Inhalt des Popunders kann dieses dazu führen, dass mehr Last produziert wird).

LibreOffice 3.4 erschienen – LibreOffice punktet weiter gegen OpenOffice

3. Juni 2011 at 16:49

libroffice-3-4

LibreOffice ist jetzt in 3.4. erschienen, ein guter Grund für ein Update.

Was ist neu in LibreOffice 3.4?

  • Der Rendering-Engine für Graphite-Fonts ist neu (bestmöglich dadurch bessere Performance, angeblich bis zu 10x schnelleres Arbeiten möglich).
  • Stabilität wurde erhöht!
  • Farben und Linienstile für die Spalten- und Fußnotentrennlinien werden nun unterstützt, womit die Kompatibilität zu ODF verbessert wird. – Sehr wichtig, denn die in OpenOffice erstellten Calc-Sheets wurden falsch formatiert, was mich persönlich arg verärgert hatte
  • Ansonsten verbesserte Filter und diverse Bugfixes

Fazit

Update auf LibreOffice 3.4 lohnt sich auf jedenfall, war die vorherige Version doch etwas „gewöhnungsbedürftig“ aufgrund schlecht formatierter OpenDocument-Tabellen … mit 3.4 lässt sich arbeiten! 🙂

Zu laden gibt es LibreOffice 3.4 hier

Der „+1“-Button von google ist da! Und nun?

3. Juni 2011 at 14:17

Darauf haben alle gewartet, oder doch nicht!? Seit 2 Tagen ist er nun da, der neue „+1“-Button von Google zum einbinden in die eigene Webseite. Aber warum, haben doch fast alle schon den „Like“-Button von Facebook integriert. Bei Facebook wissen wir wie es funktioniert, wie groß das netzwerk ist und das alle drauf klicken.

Warum braucht jetzt Google sein eigenen Button und wer wird und kann da überhaupt drauf klicken?

Eine direkte Antwort darauf habe ich nicht, wird die Zeit zeigen welches Netzwerk Google da noch aufbaut.
Aktuell ist schon so das nicht jeder ein google-account hat und und ohne selbigen da wohl auch keiner drauf klicken kann und wird. Bei Facebook sind ja mittlerweile fast alle, bei google …

Ich habe den Button jetzt schon hier im Forum eingebaut, ob sich der Aufwand gelohnt hat wird die Zeit zeigen. Ich bin gespannt! 🙂

Hier noch ein kurzes Video von google zu +1