вторник, 20 января 2009 г.

полезное

Недавно наткнулся на одну подборку закладок - http://elementiks.com/web_resources.php
нашел для себя много интересного, всем web разработчикам рекомендуется

четверг, 15 января 2009 г.

Перегрузка контроллера

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

1. Непосредственно перегружаем контроллер:
  1. require_once 'Mage/Adminhtml/controllers/Catalog/CategoryController.php';
  2. class Luxe_Promotions_Adminhtml_CategoryController extends Mage_Adminhtml_Catalog_CategoryController
  3. {
  4.     public function promotiongridAction()
  5.     {
  6.         die('Example of the new action');
  7.     }
  8.  
  9.     public function saveAction()
  10.     {
  11.         die('Example of overloaded action');
  12.     }
  13. }
* This source code was highlighted with Source Code Highlighter.


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

2. Сообщаем Magento что мы перегрузили контроллер adminhtml_category:
  1. <global>
  2.     ..............
  3.     <rewrite>
  4.         <luxe_promotions_adminhtml_category>
  5.             <from><![CDATA[#^/admin/catalog_category/save/#]]></from>
  6.             <to>/promotions/adminhtml_category/save/</to>
  7.         </luxe_promotions_adminhtml_category>
  8.     </rewrite>
  9. </global>
* This source code was highlighted with Source Code Highlighter.


В данном случае мы указываем что мы хотим чтобы все запросы на action "/admin/catalog_category/save/" перенаправлялись на наш action: "/promotions/adminhtml_category/save/"

В заключении могу сказать что этот пример выдран из одного из моих модулей, и по крайней мере до публикации был 100% рабочим :-)

среда, 14 января 2009 г.

отладка под Magento

Сегодня в очередной раз убедился в том что отладка Ajax кода под Magento - то еще удовольствие. Под впечатлением от пережитого решил накарябать парочку (возможно даже полезных) советов:

1. Если это девелопмент копия магазина - первым делом включаем отображение ошибок и debug mode. Для этого вставляем в файл index.php следующие строчки:
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
непосредственно перед вызовом Mage::run(). После этого Magento перестанет редиректить вас на error report при возникновении любой ошибки. Вместо этого сообщение об ошибке вместе с back trace будет вываливаться прямо на текущей странице.

2. Включаем логирование. Для этого заходим в System->Configuration->Developer->Log Settings и вводим соответсвующие значения. После этого вы можете использовать функцию логирования для вывода debug информации - Mage::log($foo); Очень помогает при отладке Ajax запросов.
3. С осторожностью пользуйтесь функциями вроде var_dump(), print_r() etc при выводе содержимого коллекций, так как в большинстве объектов храниться огромное количество ссылок на другие объекты, и поэтому при попытке вывести содержимое даже не самой большой коллекции вы рискуете подвесить веб сервер и обеспечите себе несколько приятных мгновений....
4. Если нужно вносить изменения в шаблоны, можно включить отображение имени блока и шаблона: страница System->Configuration->Developer->Debug в админке.

понедельник, 12 января 2009 г.

Magento 1.2.x - что нового ?

Под новый год Varien приподнесла очередной подарок поклонникам Magento, вышла очередная версия этого лучшего (не побоюсь этого слова) на данный момент open source интернет магазина. Кроме добавления поддержки скачиваемых продуктов, было внесено немало более мелких усовершенстваний. В частности притерпела некоторые изменения система тэгов внутренней CMS Magento. В прошлой статье я уже рассказывал об этих тегах, в сегодняшней статье я решил продолжить эту тему и рассказать как обстоят дела в этом направлении в Magento версии 1.2.
Тег {{skin }} - предназначен для получения независимой от настроек ссылки на файл (по умолчанию файл скина). Он может принимать следующие параметры:
  • url - путь к файлу, ссылку на который требуется получить
  • _type - значение по умолчанию - 'skin'. Этот параметр используется для указания типа ресурса, ссылку на который требуется получить. Возможные значения layout, template, skin, locale.
  • _default - значение по умолчанию false. Этот параметр служит для передачи значения по умолчанию. В случае если искомый файл не бедет найден ( а его существование проверяется перед тем как вернуть ссылку), вместо ссылки будет возвращено значение параметра _default.
  • _store - используется для явного указания store.
  • _theme - используется для явного указания текущей темы. Значение по умолчанию - default.
  • _package - используется для явного указания испльзуемой design package. Значение по умолчанию - default.
  • _area - используется для явного указания текущей области. Значение по умолчанию - frontend.
  • _relative - используется для указания типа ссылки - абсолютная или относительная ссылка
  • _secure - используется для указания протокола - HTTP или HTTPS
Если файл не был найден в указанной явно теме или design package, то его поиск будет продолжен в дефолтной теме. С помощью этого тэга также возможно подключение различных ресурсов в зависимости от типа браузера клиента. Эта возможность может быть использована к примеру для подключения различных CSS файлов для различных браузеров. Детали того как это можно сделать вы можете узнать в Mage_Core_Model_Design_Package, в котором находится реализация этого тэга (function getSkinUrl).


Тег {{store }} - предназначен для получения независимой от настроек ссылки на страницы магазина. Он может принимать следующие параметры:
url - путь к файлу, ссылку на который требуется получить
direct_url - использовать прямой URL(true/false)
_escape - обрабатывать с помощью escape() ?
_query - параметры запроса
_relative_url: true, false
_type: 'link', 'skin', 'js', 'media'
_secure: true, false
_scheme: 'http', 'https'
_user: 'user'
_password: 'password'
_host: 'localhost'
_port: 80, 443
_base_path: '/dev/magento/'
base_script: 'index.php'
_storeview_path: 'storeview/'
_route_path: 'module/controller/action/param1/value1/param2/value2'
_route_name: 'module'
_controller_name: 'controller'
_action_name: 'action'
_route_params: array('param1'=>'value1', 'param2'=>'value2')
_query: (?)'param1=value1&param2=value2'
_query_array: array('param1'=>'value1', 'param2'=>'value2')
_fragment: (#)'fragment-anchor'
Как вы видите этот тэг имеет огромное колчество параметров на все случаи жизни, значения большинства из которых понятны. Более детальную информацию можно узнать в файле Mage_Core_Model_Url, в котором находиться функция реализующая этот тэг public function getUrl($routePath=null, $routeParams=null)).

Продолжение следует.....