Ответы пользователя по тегу Magento
  • Как добавить ссылку в сайдбар в System->Configuration?

    Добавление секции: https://github.com/mage2pro/core/blob/2.11.0/Payme...
    Конкретно в этой секции «Payment» я размещаю 15 своих платёжных модулей для Magento 2: https://mage2.pro/t/917
    Добавление пункта меню внутри секции: https://github.com/mage2pro/stripe/blob/1.10.13/et...
    Конкретно этот пункт меню «Stripe» ведёт в раздел настроек моего платёжного модуля Stripe для Magento 2: https://mage2.pro/c/stripe
    Ответ написан
  • Нужна ли отдельная CRM если сайт использует платформу Magento?

    Это должны решать работник, руководитель и владелец магазина — достаточно ли им встроенной функциональности Magento, или же им ещё нужна CRM.
    Я для своих магазинов теперь использую CRM, потому что, в дополнение к Magento, она позволяет мне :
    • Вести учёт дополнительных (не встроенных) характеристик для покупателей.
    • Вести учёт дополнительных сущностей, привязанных к покупателям (например, я продаю программное обеспечение (как раз-таки модули для Magento), и для меня важен учёт таких привязанных к покупателям дополнительных сущностей как «веб-сайт», «лицензия», «веб-агентство (партнёр по продаже / внедрению)» и т.п.).

    Поэтому мне встроенной функциональности Magento было недостаточно, и я для себя внедрил Oro Platform.
    Эта платформа для бизнес-приложений, созданная основателем и бывшими разработчиками Magento 1.x.
    На основе этой платформы они создали свою тиражируемую CRM (OroCRM), а также, в вместе с партнёрами, ряд других бизнес-приложений:
    • Oro Commerce (движок интернет-магазина для юрлиц)
    • Akeneo (движок для глубокого товарного учёта)
    • Marello (ERP для интернет-магазина)
    • DiamanteDesk (движок техподдержки)

    Я оценивал разные учётные системы, и свой выбор Oro Platform обосновал здесь.
    Знания и навыки, полученные в процессе внедрения, я задокументировал на своём сайте oplatform.club.
    Примечательно, что часть функциональности моей учётной системы доступна публично.
    Например, на этом моём мини-сайте, посвящённом одному из моих программнных продуктов — модулю Stripe для Magento 2, список клиентов формируется динамически посредством Oro API на основе информации из моей системы CRM.
    Ответ написан
    Комментировать
  • Magento 2 (nginx + php-fpm) или (nginx+apache)?

    Magento 2 однозначно способна работать без Apache.
    Мои настройки Nginx + PHP-FPM для запуска Magento 2 в подпапке: https://mage2.ru/t/58
    Ответ написан
    2 комментария
  • Реально ли использовать Magento для интернет магазина в России?

    Крупные и известные магазины, работающие на Magento в России: magento-forum.ru/topic/4642/#russia
    Магазины, работающие на Российской сборке Magento: magento-forum.ru/topic/2633
    Ответ написан
    Комментировать
  • Как обновлять magento?

    Для удаления вируса с сайта надо сравнить программный код сайта с эталонным программным кодом используемой сайтом версией Magento посредством специальных инструментов сравнения типа Araxis Merge.
    Качественно сделанный вирус мог уже размножиться за пределы Magento, поэтому удалять вирус должен квалифицированный специалист.
    Обычное обновление Magento вирус не устранит. Обновлять Magento надо либо до заражения, либо после устранения последствий заражения.
    Ответ написан
    Комментировать
  • Редирект с review страницы на страницу продукта по нажатию на картинку продукта?

    Используйте метод Mage_Catalog_Model_Product::getProductUrl()
    Этот метод возвращает веб-адрес товара.
    Пример применения этого метода можно увидеть, например, в стандартном шаблоне списка товаров:
    <a 
    	href="<?php echo $_product->getProductUrl() ?>" 
    	title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" 
    	class="product-image"
    ><img 
    		src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(135); ?>" 
    		width="135" 
    		height="135" 
    		alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" 
    /></a>
    Ответ написан
    Комментировать
  • Как сделать отдельный дизайн для одного товара в magento?

    Magento сопоставляет каждой странице магазина свои макетные дескрипторы.
    В частности, одним из дескрипторов витринной страницы товара является PRODUCT_<идентификатор товара>. Например, одним из дескрипторов товара с идентификатором 100 будет PRODUCT_100.

    Зная дескриптор товара, можно создать для этого товара индивидуальное макетное правило и вызвать там метод Mage_Core_Block_Template::setTemplate() с нужным шаблоном, например:
    <PRODUCT_100>
        <reference name="product.info">
            <action method="setTemplate"><template>catalog/product/view-2.phtml</template></action>
        </reference>
    </PRODUCT_100>

    Об этом я уже многократно писал на форуме Российской сборки Magento: magento-forum.ru/topic/5117

    Кстати, индивидуальные макетные правила удобно добавлять непосредственно через административный интерфейс товара, для этого предназначена вкладка Оформление витрины:
    a6e8f33cfab64e80b1bdd451a1759063.png
    Ответ написан
    1 комментарий
  • Magento catalog_fulltext почему зависает reindex?

    За 5 лет работы над Российской сборкой Magento я встретил и устранил 3 дефекта Magento Community Edition при работе с расчётными таблицами (индексами). Причем в Magento Community Edition они, видимо, так и не устранены:
    magento-forum.ru/topic/2900
    magento-forum.ru/topic/4471
    magento-forum.ru/topic/4646

    Радует, что в Magento 2 процесс разработки ядра стал более открытым и удобным: удобно сообщать команде разработчиков о дефектах, и они их оперативно устраняют.
    Ответ написан
  • Решение для правильного дублирования сайтов?

    Мне для решения задачи быстрой установки единого программного обеспечения (в том числе на разные сервера) и удобного централизованного обновления этого программного обеспечения больше всего нравится использовать контейнеры Docker.

    Например, я использую Docker для установки и обновления современного форумного движка Discourse (ручная установка которого намного сложнее даже, чем ручная установка Magento):
    Установка через Docker: discourse-forum.ru/t/topic/11
    Обновление через Docker: discourse-forum.ru/t/topic/42

    С Docker вся процедура установки (и аналогично — процедуру обновления) нового сайта укладывается в несколько команд, которые можно поместить в единый шелл-скрипт.

    Для Magento я пока контейнеры Docker не делал, потому что я начал работать с Magento слишком давно (в 2009 году), когда Docker ещё не было, и в своё время приходилось разрабатывать для быстрого развёртывания Magento другие инструменты. Теперь же, пользуясь Docker для других проектов, планирую перейти на Docker и для Magento.
    Ответ написан
    Комментировать
  • Чем в Магенто отличаются "маленькое изображение" и "миниатюра"?

    «Маленькое изображение» («small image») отображается на витрине в списке товаров
    656a910899ba4aaa8deb53b2315b8be2.png

    «Миниатюра» («thumbnail») отображается на витрине во многих местах, например:
    в корзине:
    fe9ab98f004f466781099df4662e7edc.png

    под основной фотографией товара:
    af2947a7dcc94c61851e56e6f93035c2.png

    и т.п.

    Вообще, проблема стандартного пакета русификации с Magento Connect в том, что человек, делавший его, не вполне понимал, как работает Magento. Видимо, перед ним был просто список строк для перевода, и он переводил их механически, не особо вникая, как это всё реально устроено в Magento.

    В Российской сборке Magento я постарался сделать русификацию как можно более осмысленной, там таких вопросов с интерфейсом возникать не должно:
    0f3c73a287e0407b9298b4f96205857f.png
    Ответ написан
    1 комментарий
  • Почему Магенто пишет "категории нет в наличии"?

    Сообщение на витрине «категории нет в наличии» означает, что у текущего магазина (отображаемого на витрине) многомагазинной системы Magento отсутствуют товарные разделы.
    Из того, что в административной части есть какие-то товарные разделы, не следует, что эти товарные разделы привязаны к текущему магазину.
    Чтобы привязать товарные разделы к конкретному магазину, надо обязательно сделать их подразделами корневого раздела данного магазина.
    Корневой раздел, в свою очередь, должен быть привязан к данному магазину в административном разделе управления магазинами (в Российской сборке Magento это делается в разделе «Система» → «Магазины»).
    Ответ написан
    Комментировать
  • Magento или Opencart?

    Крупные и известные магазины, работающие на Magento (в том числе и российские): magento-forum.ru/topic/4642
    Ответ написан
    Комментировать
  • Не работает переиндексация в Magento программным методом. Через веб все отлично. Что это может быть?

    Одной из причин неправильной работы в Magento программной перестройки расчётных таблиц (переиндексации) является выполнение этой операции вне контекста административной части магазина.
    Все программные операции, связанные с изменением товаров, надо выполнять только в контексте административной части магазина.

    В Российской сборке Magento для включения/выключения административного режима имеются методы Df_Admin_Model_Mode::begin() и Df_Admin_Model_Mode::end() и их краткие аналоги: функции rm_admin_begin() и rm_admin_end().

    Метод Df_Admin_Model_Mode::begin(), в частности, реализован так:
    /** @return void */
    public function begin() {
        $this->_counter++;
        if (1 === $this->_counter) {
            $this->_currentStore = Mage::app()->getStore();
            $this->_updateMode = Mage::app()->getUpdateMode();
            /**
             * Очень важный момент!
             * Если Magento находится в режиме обновления,
             * то Mage_Core_Model_App::getStore()
             * всегда будет возвращать Mage_Core_Model_App::getDefaultStore(),
             * даже для такого кода: Mage_Core_Model_App::getStore(999).
             * Это приводит к весьма некорректному поведению системы в некоторых ситуациях,
             * когда мы обновляем товарные разделы своим установочным скриптом:
             * @see Mage_Catalog_Model_Resource_Abstract::_saveAttributeValue():
             * $storeId = (int)Mage::app()->getStore($object->getStoreId())->getId();
             * Этот код заведомо вернёт неправильный результат!
             */
            Mage::app()->setUpdateMode(false);
            Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
        }
    }


    Метод Df_Admin_Model_Mode::end():
    /** @return void */
    public function end() {
        df_assert_gt0($this->_counter);
        $this->_counter--;
        if (0 === $this->_counter) {
            Mage::app()->setCurrentStore($this->_currentStore);
            Mage::app()->setUpdateMode($this->_updateMode);
            unset($this->_currentStore);
            unset($this->_updateMode);
        }
    }
    Ответ написан
  • По каким критериям Magento может выставить для простых товаров, составляющих настраиваемый, статус Disabled?

    Единственной причиной автоматического перевода ядром Magento простого товара (в том числе и простого варианта настраиваемого товара) в состояние «не продавать» (после чего товар снимается с витрины интернет-магазина) является наличие данного товара на складе интернет-магазина в количестве, меньшем заданного административной опцией
    «Система» → «Настройки» → «Каталог» → «Наличие» → «Стандартные значения других параметров наличия товара» → «Минимальное количество единиц конкретного товара на складе, по достижению которого товар считается отсутствующим в наличии».
    По умолчанию значением этой опции является «0», то есть, Magento по умолчанию снимает с продажи товары, закончившиеся на складе.

    Обратите внимание, что указанная выше причина автоматического снятия с продажи товара является необходимой, но не достаточной.
    Окончательное решение (снимать или не снимать с продажи товар) Magento принимает, учитывая значение опций
    • «Система» → «Настройки» → «Каталог» → «Наличие» → «Стандартные значения других параметров наличия товара» → «Разрешать ли заказ отсутствущих на складе магазина товаров?»
    • «Система» → «Настройки» → «Каталог» → «Наличие» → «Параметры наличия товара» → «Выставлять ли на витрину отсутствующие в наличии товары?»

    Названия опций даны в соответствии с русификацией Российской сборки Magento.
    В англоязычной редакции Magento они называются так:
    • «System» → «Configuration» → «Catalog» → «Inventory» → «Product Stock Options» → «Backorders»
    • «System» → «Configuration» → «Catalog» → «Inventory» → «Product Stock Options» → «Qty for Item Status to Become Out of Stock»
    • «System» → «Configuration» → «Catalog» → «Inventory» → «Stock Options» → «Display Out of Stock Products»

    Участки программного кода, ответственные за автоматическое снятие товара с продажи, можно найти по ключевым словам is_salable, isSalable, IsSalable, isAvailable.

    В частности, для простых товаров (настраиваемые варианты настраиваемого товара считаются простыми товарами) автоматическое снятие товара с продажи осуществляет класс Mage_CatalogInventory_Model_Stock_Status: в двух местах: методах assignProduct и addStockStatusToProducts.

    public function assignProduct(Mage_Catalog_Model_Product $product, $stockId = 1, $stockStatus = null)
    {
        if (is_null($stockStatus)) {
            $websiteId = $product->getStore()->getWebsiteId();
            $status = $this->getProductStatus($product->getId(), $websiteId, $stockId);
            $stockStatus = isset($status[$product->getId()]) ? $status[$product->getId()] : null;
        }
    
        $product->setIsSalable($stockStatus);
    
        return $this;
    }


    public function addStockStatusToProducts($productCollection, $websiteId = null, $stockId = null)
    {
        <...>
    	
    	$stockStatuses = $this->_getResource()->getProductStatus($productIds, $websiteId, $stockId);
    	foreach ($stockStatuses as $productId => $status) {
    		if ($product = $productCollection->getItemById($productId)) {
    			$product->setIsSalable($status);
    		}
    	}
    
    	<...>
    
        return $this;
    }
    Ответ написан
    Комментировать
  • Чем вы пользуетесь для локальной разработки под Magento?

    1. Как правило, любое программное обеспечение в среде виртуальной машины работает в разы медленнее, чем в обычной среде основной операционной системы компьютера.

      Отказ от Vagrant и Virtualbox и установка требуемого для разработки программного обеспечения (интерпретатор PHP, веб-сервер, XDebug) напрямую ускорит работу Magento в разы.

    2. Всё перечисленное программное обеспечение (интерпретатор PHP, веб-сервер, XDebug) является свободным и поставляется с открытым исходным кодом, поэтому при отсутствии скомпилированной версии конкретно для Вашей операционной системы его можно скомпилировать самостоятельно.
      Поэтому XDebug доступен во всех средах (операционных системах), которые разработчики используют для разработки интернет-магазинов, в том числе и для Mac OS X 10.9.

    3. Современные версии интерпретатора PHP (5.5.13) работают заметно быстрее, чем используемая Вами устаревшая версия PHP 5.3.2, которая была выпущена 4 года назад, 4 марта 2010 года.

    4. Заметное ускорение работы Magento даёт правильная настройка MySQL, а особенно подсистемы InnoDB, интенсивно используемой Magento,

    5. Помимо программной настройки заметно ускоряет работу MySQL размещение баз данных на отдельном носителе данных.
      В частности, одним из простых способов ускорения Magento на локальном компьютере является покупка быстрого внешнего накопителя данных
      (который можно подключить через обычный интерфейс USB) и использование этого носителя только для баз данных MySQL.

    6. Значительно ускоряет работу Magento использование акселератора PHP.
      Несколько лет назад лучшим решением для Magento был акселератор APC, в настоящее же время акселератор (называется OPCache) уже включён в ядро современных версий PHP.

    7. В обычных условиях промышленной эксплуатации Magento значительно ускоряется посредством включения кэширования данных и режима, который в Magento называется «компиляция» (почти не имеет отношения к общепринятому смыслу слова «компиляция», технология заключается в автоматическом слиянии множества файлов с программным кодом в единый, что на несколько порядкой сокращает количество обращений к файловой системе).

      В условиях разработки от кэширования данных и «компиляции», как правило, приходится отказываться, потому что в этих режимах поведение системы не всегда может соответствовать текущему состоянию программного кода и данных.

    8. В таких условиях значительный (при выключенном кэшировании — до 50%) прирост производительности даёт установка специального расширения для интерпретатора PHP: «Быстрое ядро Magento».

      «Быстрое ядра Magento» реализует низкоуровневые, наиболее ресурсоёмкие и никогда не меняемые прикладным программистом операции Magento на языке С, что ускоряет их на порядок.
      Примером таких операций является работа с XML.
      В дистрибутиве Magento Community Edition 1.9.0.1 содержится 884 файла XML, и большая часть из них будет обрабатываться при каждой загрузке страницы, если кэш отключен, и это будет занимать 30-40% от общего процессорного времени, требуемого для формирования веб-страницы витрины интернет-магазина.
    Ответ написан
    Комментировать
  • Как сделать загрузку товара в magento с помощью отдельного скрипта?

    Непосредственно в Magento Community Edition реализовано 3 сценария, где происходит добавление товаров в базу данных интернет-магазина.

    1) сценарий добавления товара в интернет-магазин вручную администратором:
    Mage_Adminhtml_Catalog_ProductController::saveAction()

    2) сценарий программного удалённого добавления товара в интернет-магазин администратором по протоколам SOAP / XML-RPC:
    версия 1:
    Mage_Catalog_Model_Api2_Product_Rest_Admin_V1::_create()
    версия 2 (по стандарту WS-I): Mage_Catalog_Model_Product_Api_V2::create()
    3) сценарий пакетного импорта товаров в интернет-магазин из файлов CSV / Excel:
    версия 1 (по технологии Magento Dataflow):
    Mage_Catalog_Model_Convert_Adapter_Product::saveRow()
    версия 2 (появилась в ядре Magento позднее как ускоренная альтернатива Magento Dataflow, работает с БД на низком уровне, для первоначального обучения не рекомендую):
    Mage_ImportExport_Model_Import_Entity_Product::_saveProductEntity()


    В Российской сборке Magento (платная, но исходный код полностью открыт), в дополнение к сценариям Magento Community Edition, имеется сценарий импорта товаров из учётных систем «1C: Управление торговлей» и «МойСклад», полностью подходящий под Ваше описание:
    товары будут приходить на сервер в zip архиве, который будет открываться и из него выбираться все нужное - данные и изображения

    импорт простых товаров реализован в методе:
    Df_1C_Model_Cml2_Import_Processor_Product_Type_Simple::process()

    импорт сложных товаров (товаров с настраиваемыми опциями, в разрезе которых ведётся отдельный складской учёт):
    Df_1C_Model_Cml2_Import_Processor_Product_Type_Configurable::process()
    Ответ написан
    Комментировать
  • Насколько прожорлива magento?

    ************************************
    дополнение от 2014-05-19:

    Одним из способов ускорения на 30% любого магазина на Magento является мой второй (после Российской сборки Magento) программный продукт «Быстрое ядро Magento».

    «Быстрое ядро Magento» — это разработанное на языке C расширение PHP (дополнительный «модуль» для интерпретатора PHP), которое замещает несколько самых ресурсоёмких программных участков (функций) Magento посредством идентичной по функциональности , но на порядок более быстрой реализацией их на языке C.

    «Быстрое ядро Magento» совместимо со всеми редакциями Magento: Российской сборкой Magento, Magento Community Edition, Magento Enterprise Edition.

    «Быстрое ядро Magento» — это инструмент, который рекомендуется использовать в комплексе с другими способами ускорения Magento: например, модулями «Полностраничное кэширование» и «Блочное кэширование» Российской сборки Magento.

    ************************************
    1. Для полноценной промышленной эксплуатации интернет-магазина на Magento виртуального сервера с 1 Гб оперативной памяти мало.
      Я клиентам Российской сборки Magento рекомендую и бесплатно настраиваю выделенные (невиртуальные) сервера с 32 гигабайтами оперативной памяти.

    2. Для экслуатации интернет-магазина на Magento веб-сервер Apache избыточен: интернет-магазин будет работать быстрее, если использовать и правильно настроить веб-сервер nginx.
      Функциональности nginx вполне достаточно для Magento.

    3. Когда интернет-магазин работате только на одном физическом сервере, то установка memcached бессмысленна (ведь memcached предназначен для распределённого кэширования данных между несколькими серверами), достаточно использовать и правильно настроить APC.

    4. Для ускорения Magento важно приобрести и настроить модуль полностраничного кэширования.
      Этот модуль отсутствует в бесплатной версии Magento Community Edition, однако присутствует в стандартной комплектации профессиональных редаций Magento: Enterprise Edition и Российской сборке Magento.

    5. Для ускорения Magento важно использовать встроенный компилятор Magento.
      Компилятор объединяет файлы с исходным кодом (а в Magento их тысячи) в несколько (3-5) крупных файлов, что значительно ускоряет работу системы (меньше обращений к файлам, а эти крупные файлы при грамотной настройке сервера будут кэшироваться в виде байткода посредством APC).
    Ответ написан
  • Какие основные преимущества и недостатки Magento?

    Magento — более гибкая система, лучше масштабируется, обладает изначально большими встроенными возможностями в сравнении с другими популярными системами (Битрикс, OpenCart, PrestaShop, VirtueMart).

    Расширения и шаблоны (оформительские темы) для Magento создавать сложнее, чем для других популярных систем.

    Для развития русскоязычного магазина на Magento свои продукты предлагают три разработчика: Rugento и Mygento и я.

    Rugento и Mygento продают российские модули для англоязычной Magento. Исходный код их модулей закрыт (зашифрованы посредством ionCube), обновление платное.

    Я продаю не модули, а специализированную русскоязычную редакцию Magento (Российская сборка Magento).
    Эта редакция совместима с официальными, на неё можно в любое время обновиться с официальных англоязычных редакций.
    Мой программный продукт поставляется с полностью открытым исходным кодом.
    Что содержит Российская сборка Magento на данный момент?
    Русификация
    Интеграция с 1С: Управление торговлей
    Интеграция с Яндекс.Маркетом

    14 модулей приёма оплаты для России: эквайринг Альфа-Банка, эквайринг банка Авангард, QIWI Кошелёк, ROBOKASSA, Квитанция Сбербанка (ПД-4), WebMoney, ASSIST, Chronopay, RBK Money, Uniteller, Единая касса, Onpay.ru, Монета.Ру (PayAnyWay), PayOnline.
    Модули приёма оплаты для Украины: LiqPay, INTERKASSA.
    Модули приёма оплаты для Беларуси: EasyPay, iPay, WEBPAY.
    Модули приёма оплаты для Казахстана: эквайринг Казкоммерцбанка (epay.kkb.kz).

    10 модулей доставки для России: Почта России, EMS Почта России, СДЭК, СПСР-ЭКСПРЕСС, PONY EXPRESS, Автотрейдинг, Гарантпост, Деловые Линии, МЕГАПОЛИС, ПЭК.

    9 модулей доставки для Украины: Нова Пошта (Новая почта), Укрпошта (Укрпочта), Ночной Экспресс, Ин-Тайм, Автолюкс, Гюнсел, ЕвроЭкспресс Почта, САТ, Деливери.

    Модули доставки для Казахстана: Казпочта, EMS-Kazpost.

    Поисковая оптимизация для Яндекса.

    Адресные справочники для административно-территориального устройства России, Украины, Казахстана.

    Другие русскоязычные модули, не все из которых имеют прямое отношение к русскоязычному рынку, но делают магазин более мощным (полностраничное кэширование, блочное кэширование, маркетинговые модули (личный счёт, накопительная программа, промо-подарки, приглашения), редактор статей и т.п.).
    Ответ написан
    1 комментарий