Коварная война россии против Украины. Ориентировочные потери врага
(по состоянию на 06.12.2023)
335110
солдат
324
самолетов
324
вертолетов
5600
танков
10456
ББМ
8024
артиллерия
605
ПВО
919
РСЗО
10532
машин
22
корабли и катера
Полезные функции и часто используемый программный код в Magento
Опубликовано

Полезные функции и часто используемый программный код в 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.

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *