Tag Archives: magento

Leeren Warenkorb in Magento verbergen

Damit ich mir das merke…

Wer hat sich noch nicht gewundert (als User) oder geärgert (als Shopbetreiber), wenn man in einer Sidebar wertvollen Platz mit einem leeren Warenkorb vergeudet.
Es ist nicht wirklich hilfreich, wenn man als H1-Überschrift liest: Warenkorb” und darunter den Text “Sie haben keine Artikel in ihrem Warenkorb”.

Damit das Widget “Warenkorb” in der Sidebar nicht mehr erscheint, wenn er leer ist, gibt es einen einfachen Hack:
Man geht in /app/design/default/dein_template/checkout/cart/ und sucht sich die Datei sidebar.phtml
(Falls diese Datei oder der ganze Ordner cart in Deinem Template nicht vorhanden sein sollte, dann kopiere sie einfach vom default/default-Templateordner ab. Ordnerstruktur dabei beibehalten!)

Warenkorb

Warenkorb

 

 

 

 

 

 

Direkt vor dem ersten DIV – bei mir ist das Zeile 37 und bei anderen mag das anders aussehen, da mein Shop schon mit Modulen zugemüllt ist – werden Zeile 35 + 36 eingefügt. (Zeile 34 war schon vorhanden)
Dann – ganz am Seitenende als letzten Eintrag – kommt noch das schließende “endif”:

Warenkorb

 

 

 

 

 

Und fettich! – Wenn der Warenkorb leer ist, wird er nicht mehr in der Sidebar angezeigt.

Magento – Indexing läuft und läuft und kommt nicht zum Ende

/shell/indexer.php

Wenn man viele Artikel importiert, kann es vorkommen das Magento mit dem Index erstellen nicht mehr hinterherkommt und einfach aufgibt.

Das kommt daher, daß dieses Drecksteil von Magento nach JEDEM importierten Artikel erstmal die 9 verschiedenen Indice neu aufbaut.

Wenn man das dann im Adminbereich unter System–>Index-Verwaltung–>Index-Modus wechseln–>Manuelles update abknipst, funktioniert schon mal der Import wesentlich schneller.

Dann kann es aber passieren, das er einfach die Indice nicht mehr neu aufbaut.

Wenn das passiert, sollte man erstmal in /locks/ nachsehen und dort die .lock-Dateien löschen.

Dann loggt man sich per SSH auf den Server ein und wirft die Indexierung manuell an:

Man geht in den Ordner /shell. Dort öffnet man ein Terminal und gibt ein freundliches php indexer.php reindexall ein.
Wenn das nur eine Fehlermeldung auswirft ala: “Unbeknown class: class Mage_Shell_Compiler extends Mage_Shell_Abstract” dann muß man die Datei /shell/indexer.php öffnen und direkt nach require_once 'abstract.php'; die Zeile require_once '../app/Mage.php'; hinzufügen. Speichern und die vorherige Eingabe nochmals wiederholen.

/shell/indexer.php

Kategorien in Magento duplizieren

*wieder mal als Gedankenstütze für mich gedacht*

 

Da es in Magento von Haus aus keine eingebaute Methode gibt Kategoriebäume zu duplizieren, habe ich was gefunden, womit das einfach und schmutzig geht. Ich habe ja oft Kategorien, die dann bis zu 10 Unterkategorien und die dann wiederum zig Unterunterkategorien enthalten. Wer nen Magento hat, weiß wie langweilig das ist, wenn man das manuell duplizieren muß…

Man legt sich ein PHP-Dokument an und benennt das z.B. kategorie-kopieren.php.

 

Hier der Quellkot: (das “< ? php" (ohne Leerzeichen) zu Beginn müßt ihr Euch dazudenken - das wird in diesem Mistwordpress nicht dargestellt)
global->resources->default_setup->connection->host;
$username = $xml->global->resources->default_setup->connection->username;
$password = $xml->global->resources->default_setup->connection->password;
$dbname = $xml->global->resources->default_setup->connection->dbname;
$res = mysql_pconnect($host, $username, $password);
mysql_select_db($dbname);

$catsDone = 0;
duplicate_entity($catId);
echo $catsDone . ‘ Categories duplicated.’;

function duplicate_entity($id, $parent_id = null){
global $catsDone;

// Grab category to copy
$sql = “SELECT * FROM catalog_category_entity WHERE entity_id = ” . $id;
$query_entity = mysql_query($sql);

$entity = mysql_fetch_object($query_entity);

if(!$parent_id)$parent_id = $entity->parent_id;

mysql_query(“INSERT INTO catalog_category_entity (entity_type_id, attribute_set_id, parent_id, created_at, updated_at, path, position, level, children_count)
VALUES ({$entity->entity_type_id}, {$entity->attribute_set_id}, {$parent_id}, NOW(), NOW(), ”, {$entity->position}, {$entity->level}, {$entity->children_count})”);
$newEntityId = mysql_insert_id();

$query = mysql_query(“SELECT path FROM catalog_category_entity WHERE entity_id = ” . $parent_id);
$parent = mysql_fetch_object($query);
$path = $parent->path . ‘/’ . $newEntityId;

mysql_query(“UPDATE catalog_category_entity SET path=’”. $path.”‘ WHERE entity_id=”. $newEntityId);

foreach(array(‘datetime’, ‘decimal’, ‘int’, ‘text’, ‘varchar’) as $dataType){
$sql = “SELECT * FROM catalog_category_entity_”.$dataType.”
WHERE entity_id=” . $entity->entity_id;
//die($sql);
$query = mysql_query($sql);
while ($value = mysql_fetch_object($query)){
mysql_query(“INSERT INTO catalog_category_entity_”.$dataType.” (entity_type_id, attribute_id, store_id, entity_id, value)
VALUES ({$value->entity_type_id}, {$value->attribute_id}, {$value->store_id}, {$newEntityId}, ‘{$value->value}’)”);
}
}

$sql = “SELECT entity_id FROM catalog_category_entity WHERE parent_id = ” . $id;
$query = mysql_query($sql);

while ($entity = mysql_fetch_object($query)){
duplicate_entity($entity->entity_id, $newEntityId);
}
$catsDone++;
}

?>

Das Dokument in die root des Magento speichern (also zu index.php, .htaccess, etc.).
Dann guckt man im Adminbackend, welche ID die zu kopierende Kategorie hat. (Nehmen wir mal als Beispiel die 7)
Im Browser rufen wir dann einfach http://meine-domain.de/kategorie-kopieren.php?=7 auf.

Im Adminbackend erscheint die kopierte Kategorie dann direkt unter der Originalkategorie. Die kopierte Kategorie kann man dann drag&drop an die gewünschte Stelle ziehen.

Getestet in Magento 1.5.x und 1.7.0.2

EDIT: Es wäre natürlich auch ganz sinnvoll, wenn man die Datei nach Gebrauch vom Server löscht oder zumindest in den Rechten einschränkt (400 wäre fein).
Denn jeder Dummbot kann diese URL durchtesten und Zufallsparameter anhängen. Und wie dann der Shop aussieht, muß ich nicht mehr erwähnen…