Как почистить категории в Magento

Чтобы начисто снести все категории и оставить только стандартную, нужно выполнить следующие SQL-команды:

TRUNCATE TABLE `catalog_category_entity`;
TRUNCATE TABLE `catalog_category_entity_datetime`;
TRUNCATE TABLE `catalog_category_entity_decimal`;
TRUNCATE TABLE `catalog_category_entity_int`;
TRUNCATE TABLE `catalog_category_entity_text`;
TRUNCATE TABLE `catalog_category_entity_varchar`;
TRUNCATE TABLE `catalog_category_product`;
TRUNCATE TABLE `catalog_category_product_index`;
insert into `catalog_category_entity`(`entity_id`,`entity_type_id`,`attribute_set_id`,`parent_id`,`created_at`,`updated_at`,`path`,`position`,`level`,`children_count`) values (1,3,0,0,'0000-00-00 00:00:00','2009-02-20 00:25:34','1',1,0,1),(2,3,3,0,'2009-02-20 00:25:34','2009-02-20 00:25:34','1/2',1,1,0);
insert into `catalog_category_entity_int`(`value_id`,`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) values (1,3,32,0,2,1),(2,3,32,1,2,1);
insert into `catalog_category_entity_varchar`(`value_id`,`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) values (1,3,31,0,1,'Root Catalog'),(2,3,33,0,1,'root-catalog'),(3,3,31,0,2,'Default Category'),(4,3,39,0,2,'PRODUCTS'),(5,3,33,0,2,'default-category');

Ошибка в Magento «SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry»

При импорте данных в Magento из CSV файлов иногда выскакивает сообщение об ошибке «SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry…»

Для борьбы с этим рекомендуется почистить базу MySQL (например с phpMySQLAdmin) с помощью следующих команд:

TRUNCATE `sales_flat_quote`;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
TRUNCATE `sales_flat_quote_address`;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
TRUNCATE `sales_flat_quote_address_item`;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
TRUNCATE `sales_flat_quote_item`;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
TRUNCATE `sales_flat_quote_item_option`;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
TRUNCATE `sales_flat_quote_payment`;
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1;
TRUNCATE `log_customer`;
ALTER TABLE `log_customer` AUTO_INCREMENT=1;
TRUNCATE `log_quote`;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
TRUNCATE `log_summary`;
ALTER TABLE `log_summary` AUTO_INCREMENT=1;
TRUNCATE `log_summary_type`;
ALTER TABLE `log_summary_type` AUTO_INCREMENT=1;
TRUNCATE `log_url`;
ALTER TABLE `log_url` AUTO_INCREMENT=1;
TRUNCATE `log_url_info`;
ALTER TABLE `log_url_info` AUTO_INCREMENT=1;
TRUNCATE `log_visitor`;
ALTER TABLE `log_visitor` AUTO_INCREMENT=1;
TRUNCATE `log_visitor_info`;
ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1;
TRUNCATE `report_event`;
ALTER TABLE `report_event` AUTO_INCREMENT=1;

Часто помогает

Ошибка в Magento 1.6 с напоминалкой смены телефонного номера

При логине администратора система из-за ошибки в программе каждый раз пишет: «Reminder: Change Magento`s default phone numbers and callouts before site launch«. После удаления в менеджере сообщений при очередном логине запись появляется вновь. Отключение всего модуля проблему не решает: действительно важные сообщения в таком случае также не высвечиваются.

Для решении проблемы нужно скопировать файл app/code/core/Mage/AdminNotification/Model/Resource/Inbox.php в app/code/local/Mage/AdminNotification/Model/Resource и в 102 строке заменить

$select = $adapter->select()
  ->from($this->getMainTable())
  ->where('url=?', $item['url']);

на

$select = $adapter->select()
  ->from($this->getMainTable())
  ->where('url=? OR url IS NULL', $item['url'])
  ->where('title=?', $item['title']);

Удаляем старые сообщения и радуемся спокойной жизни

Magento ругается на отсутствие папки tmp

Если Magento вылетает со следующим сообщением: «Could not determine temp directory, please specify a cache_dir manually«, значит модуль в Zend, предназначенный для поиска места под кэш не смог справится со своей задачей. В моём случае оттого, что у провайдера руки под что-то другое заточены и папка для кэша, указанная в настройках PHP не имеет разрешения для зависи туда. То есть папку Zend находит, а писать туда не может.

Один вариант – подправить index.php в корне Magento-игсталляции и дописать туда

putenv('TMPDIR='.$_SERVER["DOCUMENT_ROOT"].'/var/tmp' );

Но у меня этот вариант не всегда хорошо работал. Иногда выскакивала всё таже ошибка. Тогда я пошёл на радикальные меры и подправил код непосредственно в Zend. Это не лучшее решение (в плане переходов на новые версии Magento, но зато надёжно работает).

Открываем файл /lib/Zend/Cache/Backend.php
ищем там функцию getTmpDir(), находим там if ($this->_isGoodTmpDir(‘\\temp’)) и дописываем else {return ‘var/tmp/’;}
Вот что должно получиться:

if ($this->_isGoodTmpDir('\\temp')) {
  return '\\temp';
} else {
  return 'var/tmp/';
}

После этого проблем с кэшем не наблюдалось.

Ошибка в Magento 1.6.1.0-rc1

При попытке экспорта списка товаров в Magento система выдаёт ошибку

Fatal error: Class 'CapacityWebSolutions_ImportProduct_Model_Convert_Adapter_Product' not found in .../includes/src/Mage_Dataflow_Model_Convert_Action_Abstract.php on line 182

Не мудрствуя лукаво, открываем файл /includes/src/Mage_Catalog_Model_Convert_Adapter_Product.php, находим в нём строку 182 и перед ней добавляем магическое заклинание:

if ($class == 'CapacityWebSolutions_ImportProduct_Model_Convert_Adapter_Product') $class = 'Mage_Catalog_Model_Convert_Adapter_Product';

после этого функция getContainer выглядит следующим образом:

public function getContainer($name=null)
{
  if (!is_null($name)) {
    return $this->getProfile()->getContainer($name);
  }

  if (!$this->_container) {
    $class = $this->getParam('class');
    if ($class == 'CapacityWebSolutions_ImportProduct_Model_Convert_Adapter_Product') $class = 'Mage_Catalog_Model_Convert_Adapter_Product';
    $this->setContainer(new $class());
  }
  return $this->_container;
}

Всё! Теперь сохраняемся и экспортируем список товаров.