Полезные функции и часто используемый программный код в Magento

Magento – это очень мощная и, поначалу, сложная для программирования CMS. Сильное влияние на это имеет то, что движок построен на сложном фреймворке Zend. С помощью данного поста мы хотим внести некоторую ясность в программный код Мадженто и попытаемся рассмотреть наиболее полезные функции при программировании в Magento.

 

 

Полезные функции языком XML

То, как Мадженто «компонует» макет страниц – это наиболее яркая отличительная характеристика Magento среди других подобных движков. В отличие от других CMS все макеты в Мадженто определяются с помощью внутренних XML-тегов. Здесь мы уже писали об устройстве макетов в Magento, поэтому, чтобы лучше понимать суть вопроса, рекомендуем сначала ознакомиться с этим материалом.

Самый «универсальный» XML-файл в теме – это локальный файл макета local.xml. Он подгружается последним и поэтому функции, описанные в нем, имеют больший приоритет и могут переопределять «дефолтные» функции. Рассмотрим основные функции, которые могут быть использованы в этом файле (ну, или в других файлах макета).

 

Добавление файлов CSS/JS на любые страницы

С помощью простого XML-кода в файле макета мы можем добавлять как CSS файлы, так и JS в любые страницы и/или блоки в Magento. Самое яркое преимущество от использования данного метода – это то, что в этом случае мы можем гарантировать, что файлы CSS и JS загружаются только в нужных нам макетах. А это помогает снизить количество запросов к серверу и также сокращает время загрузки страницы.

 

Пример кода для добавления файла CSS в блок head макета:

<reference name="head">
  <action method="addItem">
   <type>skin_css</type>
   <name>css/style.css</name>
   <params/>
  </action>
</reference>

 

В примере ссылочное имя (reference) содержит имя блока (head), в который добавляется нужный файл CSS. Для добавления CSS-файла в параметре type указывается skin_css, а для добавления JS-файла в параметре нужно указывать skin_js. В примере тег <params/> пуст, но если нам нужно дополнительные данные при подключении файла (например, закомментированное подключение для Internet Explorer), тогда указанный код:

<params/><if>lt IE 9</if>

превратится в подключение на сайте вида:

<!--[if lt IE 9]>
  <link rel="stylesheet" type="text/css" href="css/styles.css" media="all" />
<![endif]-->

 

 

Добавление/удаление блоков

Ниже представлен пример кода, с помощью которого вы можете отключить блок в одном референсе и назначить этот блок другому референсу.

 

<!-- Отключение блока -->
<reference name="perviy-blok">
  <action method="unsetChild">
   <name>block_name</name>
  </action>
</reference>

<!-- Подключение блока к другому блоку -->
<reference name="drugoy-blok">
  <action method="insert">
   <name>block_name</name>
  </action>
</reference>

 

Если вам нужно лишь удалить блок, тогда используйте только первую часть указанного кода. И, если вам нужно лишь назначить блок уже существующему другому блоку, тогда используйте вторую часть кода.

 

 

CMS-блоки позволяют пользователю выводить любое содержимое в блоке через добавление контента в блок из панели администратора. Создаете в админке CMS-блок с нужным содержанием, а вывод блока в макете делается с помощью такого кода в любом нужном референсе:

<!-- Вывод CMS-блока -->
<block type="cms/block" name="nazvaniye_bloka">
  <action method="setBlockId">
   <block_id>id_cms_bloka</block_id>
  </action>
</block>

 

 

Изменение шаблона страницы/блока

Другая важная функция, которая довольно часто используется в файлах XML, — это назначение шаблона для разных блоков макета. Пример кода:

 

<!-- Определение шаблона -->
<block type="cms/template" name="nazvaniye_bloka" template="page/html/nekiy-shablon.phtml"/>

 

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

 

<!-- Изменение шаблона для страницы -->
<reference name="root">
  <action method="setTemplate">
   <template>page/nekiy-shablon.phtml</template>
  </action>
</reference>

 

 

 

Полезные PHP-функции в Мадженто

 

XML-файлы – это, своего рода, фундамент для шаблона в Magento, а PHP-код – это «несущие стены», которые наполняют блоки макетов полезным содержанием.

 

Рассмотрим общие функции, которые используются практически на всех страницах шаблона.

Учтите, что не все функции работают во всех шаблонах, — для некоторых функций нужно дополнительное объявление через XML-макеты и/или через модули.

 

Довольно часто при создании или редактировании шаблонов приходится вставлять статический текст. Чтобы обеспечить поддержку перевода этого текста на другие языки, используйте вставку текста в шаблонах в виде:

<?php echo $this->__('Text'); ?>

 

 

Функции, которые связаны с товаром/категорией

Страницы товаров и категорий – это то, для чего и создавались все CMS электронной коммерции, т.е. они наиболее важные на сайте. И разработчику Мадженто придется большую часть времени работать именно с шаблонами этих страниц. Ниже приведены некоторые наиболее часто используемые функции в шаблонах этих страниц.

 

Из шаблона страницы категории можно получить название текущей категории с помощью такой функции:

$_category = Mage::getModel('catalog/layer')->getCurrentCategory();

 

или так:

$_current_category = Mage::registry('current_category');

 

Когда нужна определенная категория, тогда она вызывается через ее ID:

$_category = Mage::getModel('catalog/category')->load($category_id);

 

Подобным образом мы можем получить доступ к определенному товару по его ID:

$_product = Mage::getModel('catalog/product')->load($product_id);

 

В Magento у товаров в отличие от ID есть еще другой уникальный идентификатор, — его SKU (артикул). Поскольку SKU – это атрибут товара, мы можем получить доступ к товару по его артикулу так:

$_product = Mage::getModel('catalog/product')->loadByAttribute('sku', $product_sku);

 

Из шаблона товара мы можем получить название товара, например, так:

$prodName = $_product->getName();

 

И данные определенного атрибута (если его выборка была подключена в модуле):

$attributeData = $_product->getData('my_attribute');

 

 

Ниже представленная функция поможет получить доступ к изображениям товара с помощью настраиваемых параметров (размер, стиль и т.д.). Обратите внимание, что эта функция будет работать только в файле product/view/media.phtml (или же в другом шаблоне, если он предварительно объявлен в XML-макете).

 

$this->helper('catalog/image')->init($_product, $_image_attribute_name)->keepFrame(false) //если true, гарантируется, что изображение имеет размеры указанные в $width/$height

->constrainOnly(true) // если true, гарантируется, что высота или ширина изображения не превышают его фактическую ширину или высоту

->keepAspectRatio(true) // если true, будет гарантировать, что коэффициент высоты и ширины изображения не изменяется

->resize($_image_width, $_image_height); // приведенные здесь параметры используются для указания ширины и высоты картинки (изменение картинки под эти размеры).

 

 

 

Ссылки сайта

Очень часто нужно получить ссылку на ту или иную часть сайта (страницу, папку и др.). Мы можем использовать два разных подхода для генерации многих из этих URL-адресов. Первый – используя функции получения ссылок (например, getBaseUrl, getSkinUrl и т.д.), а другой подход – с помощью хелпера/модели. Второй метод сложнее, поэтому для примера будем использовать метод getURL. Например, чтобы получить URL-адрес сайта, можете использовать эту простую функцию:

$url = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);

 

Подобным образом мы можем получить URL-адрес текущей страницы:

$url = Mage::helper('core/url')->getCurrentUrl();

 

Таким же образом мы можем динамически генерировать URL-адрес любой конкретной страницы, используя следующий код:

$url = $this->getUrl('page.html');

 

Поскольку большинство файлов CSS, JavaScript и картинок находятся в каталоге skin, ссылки на этот каталог довольно популярны. Пример кода:

$url = $this->getSkinUrl('images/kartinka.jpg');

 

Если вам нужен безопасный доступ к любому файлу в каталоге skin, используйте дополнительный параметр массива ('_ secure' => true):

$url = $this->getSkinUrl( 'images/kartinka.jpg', array('_secure'=>true) );

 

 

Ниже приведены некоторые другие примеры доступа к URL-адресам каталогов:

 

Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA); //путь к папке media в корне сайта
Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_JS); // путь к папке js в корне сайта
<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN);?> //путь к папке skin – другой способ

 

 

 

Функции, которые относятся к Корзине/Заказу

Поскольку эти страницы также очень важны для сайта электронной коммерции, рассмотрим и их.

 

Для подсчета количества товаров в Корзине, используйте такой код:

<?php $_cartQty = $this->getSummaryCount() ? $this->getSummaryCount() : 0 ?>

(если Корзина пуста, тогда количество равно 0)

 

 

С помощью цикла foreach в коде ниже, вы можете выводить недавно добавленные в корзину товары:

 

<?php $_items = $this->getRecentItems(); ?>
  <?php if(count($_items)): ?>
   <?php foreach($_items as $_item): ?>
    <?php echo $this->getItemHtml($_item); ?>
   <?php endforeach; ?>
  <?php else: ?>
    <?php echo $this->__('You have no items in your shopping cart.') ?>
  <?php endif; ?>

 

 

Чтобы показать промежуточный итог стоимости товаров в Корзине, используйте такой код:

<?php echo Mage::helper('checkout')->formatPrice($this->getSubtotal()); ?>

 

 

И, наконец, вы можете использовать эти две функции для создания динамических ссылок на страницу Оформления заказа и Корзины соответственно:

<?php echo $this->getCheckoutUrl(); ?> // генерирует ссылку на страницу Оформления заказа
<?php echo $this->getUrl('checkout/cart'); ?> // генерирует ссылку на страницу Корзины

 

 

 

Функции сессий

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

$msgOne = "Это первое сообщение";
$msgTwo = "Это второе сообщение";
 
Mage::getSingleton('core/session')->setValueOne($msgOne);
Mage::getSingleton('core/session')->setValueTwo($msgTwo);

 

Теперь мы сохранили в кеш $msgOne как ValueOne и $msgTwo как ValueTwo. Чтобы вызвать их, будем использовать следующие функции:

$extractedValueOne = Mage::getSingleton('core/session')->getValueOne();
$extractedValueTwo = Mage::getSingleton('core/session')->getValueTwo();

 

Удаляем значения переменных сессии:

Mage::getSingleton('core/session')->unsValueOne();
Mage::getSingleton('core/session')->unsValueTwo();

 

 

Из переменных сессии, например, мы можем определять, залогинился ли клиент или нет:

$logged_in = Mage::getSingleton('customer/session')->isLoggedIn();

 

 

Отладка кода

Довольно часто нужно тестировать вывод и значения переменных. В Мадженто это можно сделать разными способами (некоторые функции работают не во всех файлах):

print_r($peremennaya);
Zend_Debug::dump(($peremennaya->debug());
Zend_Debug::dump($peremennaya);
var_dump($peremennaya);

 

 

 

Поскольку Мадженто – это огромная CMS, — все ее функции нельзя поместить в один пост. Поэтому, здесь представлены только самые часто используемые. Надеюсь, что для каждого читателя нашего блога нашлось что-то нужное в этом кратком обзоре полезных функций Magento.

 

This post was last modified on 14/06/2017 20:05

Последние посты

Аль Пачино

Никогда никому ничего не объясняйте. Все равно каждый поймет так, как ему выгодно Аль Пачино…

07/05/2024

SEO продвижение сайта: простые и эффективные инструкции

В современном мире все больше людей обращаются к интернету, чтобы найти информацию, товары и услуги.…

03/05/2024

Как добавить карту от Google Maps на свой сайт (с маркером и текстом)

В сегодняшнем практическом уроке мы рассмотрим пример добавления на свой сайт карты от сервиса Google…

02/05/2024

Как выбрать идеальный ноутбук: Полный гайд

Выбор ноутбука может быть сложной задачей в мире, где рынок переполнен вариантами на любой вкус…

22/04/2024

Томас Эдисон

Наша самая большая слабость заключается в том, что мы быстро сдаемся. Самый верный способ добиться…

20/04/2024

Самые красивые и впечатляющие мосты со всего мира (ТОП-10)

Мост — это нечто большее, чем просто сооружение, соединяющее два берега. Для того, чтобы появился…

19/04/2024