Переводим Magento 1 на PHP7, часть 2

Итак, в прошлой статье мы перевели нашу (вашу) Magento на PHP7. Увы, весьма часто возникают ситуации, когда несмотря на установку патчей и плагинов совместимости, под свежим PHP, Мадженто работает некорректно. Давайте же рассмотрим основные риски и способы их устранения.

  1. Устаревшая версия Magento. За последние 2 года система развивалась очень бурно. Разработчики практически несколько раз в год выпускали новые версии. Поблагодарить за это, в том числе, стоит и хакеров, которые внезапно очень пристально обратили на Magento свой взор. Но тем и лучше, т.к. ни одна другая система электронной коммерции не получала настолько подробного стресс-тестирования. Тем не менее, минусом данной ситуации стоит считать то, что обладатель или админ старенькой версии Magento, вроде 1.4 или 1.5 вынужден будет поставить большое количество патчей, чтобы закрыть основные дыры в безопасности. А ведь патчи могут быть «капризными», и если ваша система в чем-то была модернизирована (поправили какие-то системные файлы, не создавая копии в local), то «вычесывание блох» и натягивание патчей может занять много времени. Так что, оптимальным вариантом для перехода на PHP7 следует считать версию Magento от 1.9, а еще лучше самую последнюю на текущий момент (речь идет только о семействе 1-й версии, разумеется). Итак: владельцам старых версий Magento проще будет проапгрейдить свою систему до актуального варианта, чем лепить заплатки на устаревшую версию.

  2. Устаревшие плагины. Увы, в отличие от того же WordPress, Magento не умеет автоматически обновлять плагины. В лучшем случае, плагин предложит вам обновиться, показав всплывающее окно при входе в админку, и оставит напоминание на страничке системных новостей. Однако, подавляющая часть плагинов такого функционала не имеет. Так что, если вы испытываете какие-либо проблемы с некорректной работой системы после перехода на PHP7, то для начала отключите все сторонние (не-Mage) плагины, и проверьте, не ушла ли ошибка. Отключать плагины лучше посредством замены ключа <active>true</active> на <active>false</active> в настроечном файле плагина. XML-файлы настроек находятся в папке app/etc/modules. И не забудьте перед правкой отключить компиляцию! Также, имейте в виду, что плагины на самом деле не выключаются при выборе опции «отключить вывод плагина» в разделе конфигурации системы (система > конфигурация > расширенные). После отключения нештатных плагинов, можно по одному включать их, и проверять работу системы. Так же, нелишним будет обновить плагины до последних версий.

  3. Неполная правка системных файлов. Для корректной работы Magento с PHP7, увы, недостаточно только поправить файл Layout.php, например, при помощи патча из варианта №1 прошлой статьи. После правки Layout.php система, разве что, начинает запускаться и более-менее полноценно работать. Но, также возможны и проблемы, рассмотрим их ниже:

Внимание: при необходимости правки системного файла (из какой-либо подпапки app/code/core/Mage), обязательно создавайте local-копию этого файла (app/code/local/Mage/полный/путь/источника), и все правки вносите только в копию. Если вы поправите системный файл прямо в папке core, то в дальнейшем будет затруднена установка новых системных патчей.

  • Не работает экспорт товара. Правим файл:
app\code\core\Mage\ImportExport\Model\Export\Entity\Product\Type\Abstract.php

перенеся его в
app\code\local\Mage\ImportExport\Model\Export\Entity\Product\Type\Abstract.php

Строчку:

$data['filter_options'] = $this->$data['options_method']();

заменяем на:

$data['filter_options'] = $this->{$data['options_method']}();
  • Не работает экспорт клиентов. Правим:
app\code\core\Mage\ImportExport\Model\Export\Entity\Customer.php

Строчку:

$data['filter_options'] = $this->$data['options_method']();

заменяем на:

$data['filter_options'] = $this->{$data['options_method']}();
  • Не работает загрузчик файлов в админке. Правим:
lib\Varien\File\Uploader.php -- его можно поправить прямо по месту

Строчку:

$params['object']->$params['method']($this->_file['tmp_name']);

заменяем на:

$params['object']->{$params['method']}($this->_file['tmp_name']);
  • Покупатели не могут войти в систему. Правим:
app\code\core\Mage\Core\Model\Resource\Session.php
строка 218 (или рядом где-то, зависит от версии)

Строчку:

return $data;

заменяем на:

return (string)$data;
  • Некорректно считается общая сумма заказа. Скачиваем и устанавливаем плагин.

После всех произведенных правок, обязательно производим перекомпиляцию (если включена компиляция) и обновляем кэш системы.

Переводим Magento 1 на PHP7, часть 1

Язык PHP постоянно развивается, и в настоящее время актуальной является уже 7-я его версия. Интерпретатор этой версии работает заметно шустрее предыдущих — многие веб-мастера отмечают 2-3 кратный прирост производительности скриптов, и, соответственно, весьма заметное понижение нагрузки на сервер.

Magento — это довольно «тяжелая» система, и перевод на PHP7 для неё весьма желателен. Но, вплоть до Magento 2, система была рассчитана на работу под PHP 5.x, и с 7-ми версиями PHP «из коробки» просто так не работает.

К счастью, несовместимость эту можно исправить довольно легко, не прибегая к полной переустановке или апгрейду системы (которые, как любой переезд, иной раз хуже пожара).

Перейдем к сути. Во-первых, перед заменой версии PHP, в Magento необходимо отключить кэш и компиляцию. И, да: вы же не производите апгрейд PHP непосредственно на рабочем сервере? Если по каким-то причинам все же производите, то создайте в корневом каталоге сайта файл maintenance.flag, он переведет Magento в режим обслуживания. Разумеется, после полного бэкапа файлов и баз(ы) данных.

Далее, выбираем один из вариантов приведения Magento в PHP7-совместимое состояние:

Вариант 1. С минимальным вмешательством, подходит для более-менее свежих версий Magento CE, вроде 1.9.2.4. Патчим систему:

# запускаем в корневом каталоге Magento

# одной строкой, с использованием wget
wget -qO- 'https://gist.githubusercontent.com/MageMechanic/66449504110fbbd96214/raw/php7_magento_1_9_core.patch' | patch -p0

# одной строкой, с использованием curl
curl -s 'https://gist.githubusercontent.com/MageMechanic/66449504110fbbd96214/raw/php7_magento_1_9_core.patch' | patch -p0

# более наглядно:
PATCH_URL='https://gist.githubusercontent.com/MageMechanic/66449504110fbbd96214/raw/php7_magento_1_9_core.patch'

# применяем через wget
wget -qO- $PATCH_URL | patch -p0

# ...или через curl
curl -s $PATCH_URL | patch -p0

# откатить изменения через wget  
wget -qO- $PATCH_URL | patch -p0 -R

# ...или через curl  
curl -s $PATCH_URL | patch -p0 -R

Вариант 2. Решение от того же автора, что и патч выше. Устраняет так же потенциальные проблемы с загрузкой изображений при создании/редактировании товара. Рекомендуется для версий Magento CE от 1.9 до 1.9.3.1.

Скачиваем и ставим плагин вручную (распаковываем в корневой каталог Magento).

или

Устанавливаем через modman:

modman clone https://github.com/MageMechanic/PhpSeven.git --branch 1.0.3

или

Устанавливаем через composer:

composer config repositories.magemechanic git https://github.com/MageMechanic/PhpSeven.git
composer require "magemechanic/phpseven:1.0.3"

Вариант 3. Решение от старых и проверенных Magento-разработчиков, компании Inchoo. Рекомендуется для версий Magento CE от 1.9, подходит и для Magento EE от 1.4.2.2. Плагин хорош полной обратной совместимостью с PHP 5.x, т.е, в случае необходимости откатить версию PHP, вам не понадобится выключать этот плагин или отменять патч. Также, рекомендован к установке после применения патча SUPEE-8788  (о котором будет отдельная статья). Устанавливается просто: скачиваем и распаковываем в коренной директории Magento.

Итак, после применения патча или установки одного из плагинов совместимости, вы получите Magento, работающую под PHP7. Поздравления! Теперь можно удалить (или переименовать) файл maintenance.flag, и проверить работу вашего интернет-магазина. Если в вашей системе не было устаревших сторонних плагинов, то все должно будет сразу корректно заработать, и можно будет включить кэш и скомпилировать заново исполняемые файлы (не просто включить компиляцию!). Учтите, проверке должны подвергнуться все аспекты работы магазина: от регистрации и логина клиента, совершения им разных типов покупок, до создания продукта в админке, правке категорий, атрибутов и типов продуктов. Увы, как показывает практика, после перехода на PHP7 может возникнуть немало неочевидных проблем, и о них мы поговорим в следующей части статьи.

Источники:

https://gist.github.com/MageMechanic

 
http://inchoo.net/magento/its-alive/

Правила хорошего тона для интернет-магазина.

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

Ниже я сделаю небольшую подборку правил, которых желательно придерживаться администраторам интернет-магазинов:

  • не используйте для оформления картинки из бесплатных банков или клипарты. Для российского, например, покупателя, картинки с пластиково-чистыми и натужно улыбающимися европейцами или американцами выглядят неестественно. В картинке должно быть немного страдания, это же Россия;
  • то же с товарами. Левые фотки, или тем более, рендеры откуда-то из Интернета только отпугнут клиентов;
  • вообще, в идеале для наполнения каталога нужно использовать самодельные фото товаров, и только. Все сторонние фото, которые вы найдете, как правило снабжены водяными знаками, которые чаще всего не получится быстро и качественно удалить;
  • не используйте для товаров фотографии низкого разрешения, это неуважение к покупателю;
  • для товаров с множеством характеристик (различная электроника, например) тщательно проверяйте все параметры, для покупателей это очень важно. Опять же, неправильно указанный в товарном каталоге параметр может быть поводом для судебного разбирательства;
  • многие небольшие интернет-магазины грешат демпингом за счет исключения из цены стоимости курьерской доставки, которая в них обязательна, т.к. пунктов самовывоза нету. Мало того, что эта хитрость работает только непродолжительное время, так она еще и может стать причиной, опять же, для суда. И закон будет на стороне покупателя, т.к. «принудительная» доставка является навязанной услугой. Так делать не стоит;
  • оперативно проверяйте наличие товара и корректируйте каталог. Если в каталоге есть неактуальные ходовые позиции, это, конечно, улучшит ваше SEO, но реальные отзывы о магазине может испортить;
  • своевременно обновляйте рекламные баннеры и объявления на сайте. Просроченная реклама это очень хорошая антиреклама;
  • опять же, вовремя обновляйте копирайты (© 2016 VasilyShop), если ваша тема/скрипт не делает это автоматически. Заброшенный магазин не вызывает доверия.

Статья будет дополняться. Если у вас есть дополнения, черканите комментарий.

Почему Magento?

Почему, собственно, Magento? В чем её преимущества? E-commerce система Magento является очень качественным продуктом. Она изящна снизу (от самой архитектуры) и до самого верха (интерфейсов админа и пользователя).

Если вы разработчик, вам наверняка понравятся:

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

Сисадмины магазинов оценят:

  • возможность производить многие действия через командную строку, соответственно, писать и использовать скрипты для автоматизации;
  • детальные логи системы, позволяющие подробно проанализировать корректность работы магазина;
  • мощные средства автоматизации, в том числе и сторонние, в большинстве случаев — бесплатные;
  • постоянную работу команды разработчиков системы над кодом и выпуск ими патчей, исправляющих ошибки и расширяющих функционал;

Владельцу или менеджеру интернет-магазина будет небезразлично:

  • удобный интерфейс админки, позволяющий быстро создавать товарные группы и товары;
  • развитая система оповещений и реагирования на новые заказы;
  • возможность увязки с онлайн-каталогами магазинов и системами ведения бухгалтерского/складского учета;
  • возможность продажи цифрового контента;
  • развитые возможности пакетной обработки товаров, массовых изменений в товарном каталоге;
  • широкие возможности проведения промо-акций, рассылок, показа рекламных баннеров, использования скидочных купонов.

Покупатель же, в итоге, видит логичный и удобный магазин, который вызывает доверие с первого взгляда. Также, для покупателя имеются следующие возможности:

  • личный кабинет, где можно указать адреса доставки, контакты для связи и т.д.;
  • поиск товара по параметрам;
  • сравнение выбранных товаров на одной странице;
  • написание обзоров товара;
  • получение полезных рассылок об обновлениях товарного каталога или наличия товара.

На самом деле, данный текст не претендует и на 1/10 сколь-либо подробного описания этой замечательной системы, Magento. Он лишь отображает наиболее яркие, на мой взгляд, позитивные отличия от других систем (Opencart, Bitrix, и т.д.). И если вы еще не решили, на какой платформе вам создавать ваш новый интернет магазин (или на что переводить существующий), то я горячо рекомендую вам Magento.

Hello, Magento World!

Здравствуйте, пользователи и разработчики замечательной платформы Magento. С 2012 года я занимаюсь разработкой новых интернет-магазинов, а также доработкой и сопровождением существующих, и успел накопить немалый опыт работы с этой CMS. В статьях этого сайта я буду рад поделиться с вами полезными советами и идеями, которые, как я надеюсь, помогут облегчить вашу жизнь и получить больше позитивной отдачи от ваших проектов.

Если Вам нужна помощь в разработке магазина на платформе Magento, доработка существующего или его обслуживание, то напишите мне прямо сейчас.