понедельник, 24 июня 2013 г.

Прощай Ubuntu, здравствуй Debian!

Долгое время на моем ноуте стояла Kubuntu, так как KDE - это единственная достойная внимания графическая оболочка для работы. Мне в KDE нравится все: и дизайн, и интегрированность компонентов и общий подход к дизайну приложений.

В последнее время из рядов Canonical стали приходить тревожные новости: Unity вместо гнома, Mir - вообще что-то из ряда вон выходящее. Вместо того, чтобы сделать свою тему оформления и набор плагинов для Gnome и сливать наработки в общий котел, ребята из Canonical решили сделать свой Gnome с блекджеком и шлюхами Unity. Дальше - больше... не прошло и года, как им понадобился свой дисплейный менеджер - Mir....


На мой взгляд фрагментация сильно вредит экосистеме свободных проектов.Я не очень разбираюсь в мире дисплейных менеджеров, может и имело смысл делать свой... Но какой смысл был в разработке Unity -- хоть убей понять не могу.

В общем я решил что поддерживать велосипедостроение в Ubuntu  я больше не буду и пересел на Debian.

четверг, 14 февраля 2013 г.

Автоматическое создание обратных ссылок BackReference

Суть задачи: есть ноды определенного типа в которых есть поле entity reference, которое ссылается на другие ноды этого же типа. При  создании такой ноды можно выбрать другие материалы, которые при просмотре созданного материала будут видны как ссылки типа see also (или похожие материалы). 
Нужно чтобы при добавлении ссылки на материал (назовем его дочерним материалом) в родительский материал - создавалась обратная ссылка в дочернем материале (ссылка, которая ссылается на родительский материал).

Нашел отличный видео-урок: http://dev.nodeone.se/en/creating-multiple-back-links

Ну и ссылка на видео напрямую: 

вторник, 5 февраля 2013 г.

Как в Drupal 7 подменить один пункт меню другим

Иногда необходимо, чтобы вместо вызова стандартного обработчика для какого-нибудь пункта меню, вызывался обработчик для другого меню.

Нашел пример как это делается в модуле User

menu_set_active_item('user/' . $user->uid);
return menu_execute_active_handler(NULL, FALSE);

четверг, 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 по скорости. Если очень постараться и вынести всю статику на отдельный поддомен, то можно еще ускориться.