Написать завтра.
среда, 31 июля 2013 г.
Magento. Добавление статического блока.
Если нужно добавить статический блок для этого нужно в update/install script или где нибудь еще написать вот это:
Переменная $content говорит сама за себя, что нужно с ней делать. Понятное дело, что не необходимости данный скрипт выполнять каждый раз при запуске магенты.
Следующим шагом будет создание блока в layout.
Найдя блок в котором мы собираемся отобразить блок, пишем в layout'e следующий код:
Mage::getModel('cms/block')
->load('footer_nav_menu')
->delete()
;//если такой блок уже существует удаляем его из бд.
$content = <<<HTML
<ul>
<li>
Haha
<ul>
<li><a href="#">Notre mission</a></li>
<li><a href="#">Nos boutiques</a></li>
</ul>
</li>
<li>
SERVICES
<ul>
<li><a href="#">Programme de fidélité</a></li>
<li><a href="#">Guides conseils</a></li>
</ul>
</li>
<li>
QUESTIONS
<ul>
<li><a href="#">FAQ</a></li>
</ul>
</li>
</ul>
HTML;
Mage::getModel('cms/block')->setData(array(
'title' => 'footer_nav_menu',
'identifier' => 'footer_nav_menu',
'content' => $content,
'is_active' => 1,
'stores' => array(Mage_Core_Model_App::ADMIN_STORE_ID)
))
->save();
Переменная $content говорит сама за себя, что нужно с ней делать. Понятное дело, что не необходимости данный скрипт выполнять каждый раз при запуске магенты.
Следующим шагом будет создание блока в layout.
Найдя блок в котором мы собираемся отобразить блок, пишем в layout'e следующий код:
<block type="cms/block" name="footer_nav_menu">Далее запомнив родительский блок нашего ноовго блока, переходим в его phtml и выводим его содержимое:
<action method="setBlockId">
<block_id>footer_nav_menu</block_id>
</action>
</block>
<nav id="footer-links">Вот и все!
<?php echo $this->getChildHtml('footer_nav_menu') ?>
</nav>
среда, 24 июля 2013 г.
Правило 30 секунд.
Нашел классный комент:
Правило 30 секунд заключается в том, что если посторонний программист за 30 секунд не может разобраться в том, что делает метод, то его нужно переписывать. Если метод длинный, то разбить на несколько более мелких с говорящими именами. Если метод короткий, то значит что-то не так с naming’ом.
Прыгать по методам интересно будет, когда их нужно будет править, или когда интересны будут детали реализации. А для того, чтобы понять, что делает код в общем, достаточно хороших имен и короткого метода.
Кстати, у тебя этот прием использован во втором примере: WritePageNumberOnBitmap ты вынес в отдельную функцию, хотя вызывается она всего в одном месте. Точно так же стоит поступать и с остальными, т.е. получится что-то вроде (за синтаксис не пинать, ибо на Delphi уже больше 10 лет не писал).
Mail. Easy Send and Get Mails from local web-server.
Если нужно посмотреть отправленые emails с локального сервера и очень не хочеться устанавливать всякие sendmail'ы, которые, кстати нужно правильно настроить. Есть очень простой способ. Во всех файлах php.ini (в ubuntu их почему-то несколько) и добавить следующую строчку:
sendmail_path = "cat >> /directories/to/mail/file/php.mail.log"Потом создать указанные директории, сделать для них нужные права доступа. И при отправке email's , например, из php скрипта, все будет ДОзаписываться в файл php.mail.log
Magento EAV in Database. Способ поиска ошибок, спомощью запросов к бд.
Структура очень проста. Есть название атрибута, у которого есть собственный id. Узнать его можно в таблице eav_attribute. Соответственно смотрим на заголовки полей и ориентируемся. Поле entity_type_id указывает к чему относится атрибут, например к customer'ам = 1 или products = 4 (Тут могу ошибится). При создании атрибута указывается его тип: int, text, varchar, datatime и другие.. его тоже необходимо знать.
Затем, зная всю ту информацию об искомом атрибуте, которая была описана выше, начинаем сам поиск. Если entity_type_id=1, то имена таблиц которые будут хранить значения атрибутов, будут начинаться с customer_entity (для 4 это catalog_category_entity). Далее зная тип атрибута находишь таблицу название которой содержит соответсвующий тип. А затем зная attribut_id находиш строку и смотриш значение. Так же следует учитывать, что это EAV, и один на один attribute id будет несколько значений. Там нужно ориентироваться по назвнием полей.
Все это (это запись и все остальные) я пишу для себя и языком понятным только мне для того, что бы в первую очередь, быстро вспомнить, если что-то забыл. А также для того, чтобы лучше запомнить новую информацию.
Узнал о новом способе поиска ошибок, неполадок (раньше не приходилось пользоваться и не хотелось сильно углублятся в дебри классов). Каждая модель генерирует MySQL запрос в базу данных. Например в модели order'ов, есть методы getSelect() и assemble(), которые вернут полный Select запрос. Потом копируя в phpmyadmin пробуешь его с разными значениями. Вычисляешь каких значений не хватает, или наооборот какие значения лишние и делаешь соответсвующий вывод.
Как я писал ранее, я уже все забыл про то, как magenta взаимодействует с БД. И поэтому нужно все заново изучить, потому что описанные выше методы не у всех моледей есть (а может я спешил и не там попробовал). В общем все нужно изучить заново.
Затем, зная всю ту информацию об искомом атрибуте, которая была описана выше, начинаем сам поиск. Если entity_type_id=1, то имена таблиц которые будут хранить значения атрибутов, будут начинаться с customer_entity (для 4 это catalog_category_entity). Далее зная тип атрибута находишь таблицу название которой содержит соответсвующий тип. А затем зная attribut_id находиш строку и смотриш значение. Так же следует учитывать, что это EAV, и один на один attribute id будет несколько значений. Там нужно ориентироваться по назвнием полей.
Все это (это запись и все остальные) я пишу для себя и языком понятным только мне для того, что бы в первую очередь, быстро вспомнить, если что-то забыл. А также для того, чтобы лучше запомнить новую информацию.
Узнал о новом способе поиска ошибок, неполадок (раньше не приходилось пользоваться и не хотелось сильно углублятся в дебри классов). Каждая модель генерирует MySQL запрос в базу данных. Например в модели order'ов, есть методы getSelect() и assemble(), которые вернут полный Select запрос. Потом копируя в phpmyadmin пробуешь его с разными значениями. Вычисляешь каких значений не хватает, или наооборот какие значения лишние и делаешь соответсвующий вывод.
Как я писал ранее, я уже все забыл про то, как magenta взаимодействует с БД. И поэтому нужно все заново изучить, потому что описанные выше методы не у всех моледей есть (а может я спешил и не там попробовал). В общем все нужно изучить заново.
Magento EAV Attribute for Customer
Недавно столкнулся с проблемой. Был создан атрибут для customer'a. В него записывалось значение, он сохранялся в бд (видно через phpmyadmin), но при загрузке у него было нулевое значение. Самое интересное, что другие атрибуты, котрые были добавлены до меня, тоже странно работали. Но, все таки работали.
Самое первое, как я понял нужно делать, это обновлять кэш (в т.ч. удалять папку cache), а также делать обновление index'сов.
Решение проблемы, было очень простым.
Сначала нужно взять коллекцию пользователей:
protected function _getCustomers(){$collection = Mage::getResourceModel('customer/customer_collection');$collection->addAttributeToSelect('loyalty_reward_buy_start_date')->addAttributeToSelect('loyalty_reward_buy_end_date')->addAttributeToSelect('loyalty_reward_buy_points')->addAttributeToSelect('loyalty_reward_total_points')->addAttributeToSelect('loyalty_reward_buy_level')->addAttributeToSelect('loyalty_reward_all_coupons')->addAttributeToSelect('preferred_store_id');$collection->getSelect()->where('is_active = 1');return $collection;}
И, как видно из кода, нужно было добавить имя атрибута, в запрос используя метод addAttributeToSelect. Потом, из коллекции, выбираешь нужного customer'a и в нем благополучно будут загружены указаные атрибуты. Которые потом изменяешь и благополучно сохраняешь спомощью save().
Из этой проблемы я также выяснил, что плохо изучил взаимодействие magento с БД.
Подписаться на:
Сообщения (Atom)