четверг, 19 января 2012 г.

Moogento_PickPack

Клиенту нужен был модуль, был выбор из 3-4-х. Выбрали самый "фичастый", купили.
Заглянул в код.... мама дорогая! В одном методе 3000 строк. Писал явно индус(ы).

вторник, 17 января 2012 г.

Как в Magento получить controller, action, router, module

Иногда необходимо узнать, какой конкретно контроллер вызывается. Это можно легко определить из любого шаблона (.phtml):
// Controller
print $this->getRequest()->getControllerName();
// Router
print $this->getRequest()->getRouteName();
// Action
print $this->getRequest()->getActionName();
// Module
print $this->getRequest()->getModuleName();

четверг, 17 июня 2010 г.

Проблема с кэшированием блоков в Drupal

Сегодня пытался решить проблему с одним блоком на сайте клиента. Суть проблемы в том, что есть форма и она не должна кэшироваться, то есть должна, но вместе со страницей.
В block api есть возможность отключить кэширование для отдельного блока посредством указания  
$block[$id]['cache'] = BLOCK_NO_CACHE

Проблема в том. что если с самого начала этот параметр отсуствовал, то изменения не запоминаются и блок все равно кэшируется.

Ситуацию можно спасти запустив SQL код:
UPDATE blocks SET cache = -1 WHERE module = 'your_module_name';

Если у модуля несколько блоков и только один требует отмены кэширования, то в запрос нужно добавить параметр delta

суббота, 13 июня 2009 г.

Конфигурация Nginx + php + fast-cgi для Magento

Всем добрый день :)

Не так давно пришлось оптимизировать сервер у заказчика. Нужно было заменить Apache на Nginx. На официальном форуме можно найти примеры конфигурации, например здесь, однако использование rewrite для таких случаев всячески порицается разработчиком сервера.

Замечания

  • Процесс сборки nginx и php описан на офсайтах
  • Предполагается, что php с поддержкой fast-cgi настроен и работает на 127.0.0.1:8888, а nginx на 127.0.0.1:80
  • Папка, в которой лежат файлы Magento: /home/alex/www/server.com/
  • Так как Nginx работает с php напрямую, а не через связку с Apache, следует обратить особое внимание на директивы для php, которые идут в .htaccess из стандартной поставки magento. Nginx не обрабатывает директивы из .htaccess и поэтому их нужно перенести в php.ini. У меня, например, перестала работать загрузка картинок к товарам, пока не добавил suhosin.session.cryptua off в php.ini.
  • Предполагается, что в Magento настроены ЧПУ
Ниже привожу свою конфигурацию. Дополнения и коментарии всячески приветствуются.

server {
listen 127.0.0.1:80;
server_name server.com;
#Включаем сжатие
gzip on;
#gzip_comp_level 9;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain application/xml text/html text/css text/js application/x-javascript;
# Важно!!!! Ниже должна быть указана папка в которой лежит код Magento
root /home/alex/www/server.com/;

location / {
index index.php;
error_page 404 = @magento;
}
# Фикс для js
location /js/ {
index index.php;
error_page 404 = @magento_js;
}
# Фикс для случая, когда используется расширение FOOMAN_Speedster.
location ^~ /minify/ {
rewrite ^/minify/([^/]+)(/.*.(js|css))$ /lib/minify/m.php?f=$2&d=$1 last;
break;
}

location @magento {
# Если fastcgi_params лежит по другому пути то заменить на свой
include /etc/nginx/fastcgi_params; #Важно !!!!
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME $document_root/index.php; #Важно !!!
}

location @magento_js {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME $document_root/js/index.php;
}
location ~ .php$ {
index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.12:8888;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

location ~* \.(jpg|gif|png|css|js|jpeg|ico)$ {
if (-f $request_filename) {
access_log off;
expires 7d;
}

}
После такой настройки плагин YSlow дает сайту уровень B по скорости. Если очень постараться и вынести всю статику на отдельный поддомен, то можно еще ускориться.