вторник, 27 декабря 2011 г.

Magento. Редиректы. Суровая правда.

Хм... Что, Вас опять мучает, уже который час, надоедливый вопрос: как же все таки отправить пользователя на другую страницу админки (обрабатываемую другим контоллером)?
Небольшие пояснения по этому поводу.
Существует несколько методов для редиректа. Это редирект на определенный URL например http://www.example.com/test/foo. И редирект с параметрами, но в этом случае необходимо использовать путь распознаваемый роутером (наверняка вы встречали в коде контроллеров редиректы с такими путями */* или */index и пр.).
Код применим в методах контроллеров:
Первый способ.
$this->_redirectUrl($url);
Второй способ.
$params = array ("arg1" => "foo", "arg2" => "bar");
$this->_redirect($path, $params);
Надо заметить, если вы включили в админке безопасные ссылки то для редиректа в админ-панели, надо сгенерировать безопасную ссылку следующим способом:
Оговорюсь сразу, тут надо применить костыль, т.к. ссылку то мы получим, но генератор вырежет из нее часть ссылающуюся на админку. Я не нашел элегантного способа обойти это, поэтому не привожу пример костыля, ибо считаю что код-костыль не имеет право на публикацию :).
// Может принимать значения и по маске роутера, например */*
$path = 'admin/system_convert_profile/run' // Этот путь, к примеру, на запуск профиля импорта/экспорта
$params = array ("id" => 8);
$url = Mage::helper('adminhtml')->getUrl($path, $params);
// Дальше код-костыль которые возвращает утеряное
$this->_redirectUrl($url);
Чтобы установить редирект не в контроллере надо обратиться к объекту Response.
// Для первого способа, с указанием URL
$url = "http://www.example.com/";
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
// Для второго способа, с указанием пути (в формате роутера магенты и параметров)
$path   = "news/archive";
$params = array ("arg1" => "foo", "arg2" => "bar");
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl($path, $params));

пятница, 2 декабря 2011 г.

Image Magic - граница и квадратный ресайз с обрезкой

Для того чтобы вырезать и отресайзить картинку:
convert -strip -interlace Plane -quality 90 resource.jpg -resize 15 -gravity center -crop 10x10+0+0 +repage destination.jpg
Надо добавть границу к картинке? Не проблема:
convert resource.jpg -bordercolor red -border 1 destination.jpg

среда, 30 ноября 2011 г.

Debian - размер папки и количество файлов

Определить рекурсивно количество файлов в папке можно так
find . -type f|wc -l
Посмотреть размер указаной папки:
du -hc --max-depth=1

среда, 23 ноября 2011 г.

Magento. Добавление кириллического доменного имени.

Как привязать еще один домен к magento магазину. Думаю такая ситуация возникает довольно таки редко, но все же, к примеру, у вас появился новый домен на кириллице купленный за кровные. Очень жалко смотреть как он пылится на парковке у провайдера. Надо бы его пустить в работу. Все что будет сказано в статье касается только лишь настроек самого магазина и никак не касается сопутствующей настройки сервера. Итак приступим.
Для реализации задуманного нам понадобится следующее:
  1. Доступ к файлу /index.php
  2. А также доступ к админ-панели магазина.
Затем делаем следующее:
  1. Заходим в админку, переходим Систма>Конфигруация (System>Configuration), на странице выбираем пункт Управление магазинами (Manage Store). Затем создадим новое представление нашего магазина, клацаем на кнопке Создать представление магазина (Create view store). Заполняем поля как вам угодно, главное запомнить Код (Code), он нам еще понадобится. И, да, не забудьте статус поставить во "включен" (enable). Итак, мы создали новое представления для нашего магазина, оно будет полностью наследовать если можно так сказать все что есть у магазина default (или как он там у вас называется).
  2. Теперь необходимо сконфигурировать кое-что специально для нашего нового представления. Переходим Систма>Конфигруация (System>Configuration). В списке "Текущая область действия конфигурации" (Current scope configuration) Выбираем наш нове новое представление . Выбираем секцию Web (Web). Мы будем работать с двумя блоками Безопасное соединение (Secure connection) и небезопасное соединение (Unsecure conneciton). Снимите галочки Использовать с сайта (Use Website) и поля Базовый URL (Base URL) станут доступны для записи вписываем туда, внимание, ваш новый кириллический адрес в формате punycode, сохраняем.
  3. Конечно же не забываем обновить индексы и кеш после всего проделанного.
  4. Теперь самое время подрихтоватьнаш index.php для этого добавим такие строки после определения переменной $mageRunCode.
    $yourPunycodeHostName = 'xn--h1ahfamim.com.ua';
    if ($_SERVER['HTTP_HOST'] == $yourPunycodeHostName  || $_SERVER['HTTP_HOST'] == $yourPunycodeHostName )
        $mageRunCode = 'photomir_ru';
    Где переменой $mageRunCode вы присваиваете Code вашего нового представления
  5. Теперь все хорошо, можете вбивать свой адрес на кириллице, и скорее всего у вас будет ошибка на главной, которая вам намекнет о том что страница не определена (впрочем как и некоторые блоки).
  6. Значит будем определять все страницы (и блоки) для нового представления, это можно сделать в админке (CMS>Pages или CSM>Blocks), путем выбора на странице редактирования нашего нового представления. Или же запустить скрипт, который автоматически перенесет все страницы в новое представление. Код, написанный мной, приведен ниже:
    require 'app/Mage.php';
    $app = Mage::app('default');
    $dbWrite = Mage::getSingleton('core/resource')->getConnection('core_write');
    $dbWrite->query('update cms_page_store set store_id = 0');
    $dbWrite->query('update cms_block_store set store_id = 0');
    
    Вы его можете добавить в файл который будет создан в корне магазина и запустить после чего рекомендую его удалить. 
Все, теперь обратившись к своему сайту по кириллическому домену (при условии конечно же что еще и сервер вы настроили), то попадете туда куда надо.
P.S.: Все вышесказанное, в принципе, касается не только кириллического домена как можно заметить.

среда, 26 октября 2011 г.

Как быстро сделать скин для CKEditor'а

Пошаговая инструкция для быстрого создания скина для чудо-редактора CKEditor В структуре каталогов редактора находим папку skins (она отмечена на скрине) открываем, это будет область нашего действия.
  1. Создаем папку для будущего скина в /skins/ например у меня это ae
  2. Копируем содержимое папки с готовым скином в нашу папку например /skins/v2 в /skins/ae
  3. Привести пример структуры файлов и папок.
  4. Если вы используете какую-либо IDE способную форматировать код то Вам бдует легче, я использую PHPStrom.
  5. Создам проект "Ae skin for CKEditor" в моей среде разработки.
  6. Открываем файл /skins/skins.js. Если код файла будет обфусцирован (короче говоря не читаем) то в PHPStorm можно все поправить нажав комбинацию клавиш Shift+Alt+F. Далее ищем названия старого скина (тот который мы взяли за основу) меняем его на наше. У это v2 -> ae. 
  7. Так как весь редактор завернут в уникальный класс названный по такому шалону .cke_skin_[название_скина], то для ускорения работы применим тот же "грязный" прием что и для скриптового файла. т.е. зменим средствами редактора .cke_skin_v2 на .cke_skin_[название_вашего_скина] (в моем случае это будет .cke_skin_ae). 
  8. Повторяем п.7 для файлов /skins/dialog.css и /skins/templates.css В итоге мы получаем клон скина, который взят за основу, но только теперь он носит имя и мы можем смело менять стили.
  9. Затем грузим наш текстовый редактор с нашим скинов и вооружившись FF+firebug (или аналогом), выбираем необходимые для переделки элементы и смотрим какие css-классы им назначены, после чего находим их в наших стилевых файлах и стилизуем как нам захочится. Все должно пойти без проблем. Но вот у меня возникли трудности с фоном для области вводимого текста (попросту не удалось тупо сменить background). Пришлось править не только CSS для стиля но и наш js файл /skins/skins.js. А имеено добавил такие строчки в замыкание скина:
    for (var i in CKEDITOR.instances) {
        if (CKEDITOR.instances[i].skinClass == 'cke_skin_ae')
            CKEDITOR.instances[i].addCss('body {background: #f7fafc url(\'../skins/ae/images/editor_content_bg.png\') repeat-x left top;}');
    }
    
Что в этих строчках происходит. Это циклический перебор всех редакторов на странице и если встречается редактор с нашим скином то применяем CSS стиль для фона области ввода текста.
Ну а теперь то что было до моих стараний:
и после:
В скором времени еще будут готовы иконки. Сейчас над ними пыхтит дизайнер. Скрин скина выложу обязательно.
 А вот и финальный скин для CKEditor'a сделанный мной. Сам скин выложить увы пока не могу, надо согласовать этот вопрос. Т.к. право собственности не совсем мое, а авторское только кода касается :)