Статьи

Разработка пользовательских виджетов в Magento

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

В этом уроке вы узнаете о концепции виджетов в Magento и о том, как вы можете их использовать. Я продемонстрирую, как вы можете создать собственный виджет, который является действительно мощным способом добавления дополнительных функций в Magento.

Как разработчик Magento или администратор сайта, вы, вероятно, знаете о структуре внешнего интерфейса Magento. Почти каждый фрагмент контента, который отображается в интерфейсе Magento, генерируется «блоками контента». Блоки Magento — это действительно мощный способ структурировать интерфейсный контент и обеспечивают гибкость, позволяя вам работать с ними с помощью файлов XML.

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

Давайте попробуем понять это на простом примере. На информационных страницах вашего сайта вы хотели бы отображать ссылки «Распечатать» и «Связаться с нами». Ссылка «Печать» позволяет пользователям распечатать выбранную страницу, а ссылка «Связаться с нами» позволяет им отправить запрос по электронной почте в службу поддержки. Для этого мы можем просто разработать виджет Magento, который позволяет администраторам сайта вставлять этот виджет в выбранную статическую страницу сайта.

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

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

Я предполагаю, что вы знакомы со структурой модулей Magento. Сначала давайте рассмотрим структуру файла, которую нам нужно реализовать для нашего пользовательского виджета.

  • app/etc/modules/Envato_All.xml : это файл, используемый для включения нашего модуля виджетов.
  • app/code/local/Envato/WidgetLinks/etc/config.xml : это файл конфигурации модуля.
  • app/code/local/Envato/WidgetLinks/etc/widget.xml : это файл объявления виджета, который используется для объявления информации и параметров виджета.
  • app/code/local/Envato/WidgetLinks/Model/Options.php : это файл модели, который предоставляет параметры для конфигурации.
  • app/code/local/Envato/WidgetLinks/Helper/Data.php : это файл, который находится в соответствии со стандартами.
  • app/code/local/Envato/WidgetLinks/Block/Links.php : здесь отображается логика отображения виджета.

Согласно соглашениям Magento, сначала нам нужно создать файл включения модуля. Создайте app/etc/modules/Envato_All.xml и вставьте следующее содержимое в этот файл. Мы использовали «Envato» в качестве пространства имен нашего модуля и «WidgetLinks» в качестве имени модуля. Он включит наш модуль «WidgetLinks» по умолчанию.

01
02
03
04
05
06
07
08
09
10
<!— app/etc/modules/Envato_All.xml —>
<?xml version=»1.0″?>
<config>
  <modules>
    <Envato_WidgetLinks>
      <active>true</active>
      <codePool>local</codePool>
    </Envato_WidgetLinks>
  </modules>
</config>

С этого момента мы будем создавать необходимые файлы в app/code/local/Envato/WidgetLinks , который является нашим путем к модулю виджетов. Создайте app/code/local/Envato/WidgetLinks/etc/config.xml и вставьте следующее содержимое в этот файл. Как видите, мы только что объявили имена классов, вспомогательных и блочных классов в соответствии с XML-соглашениями модуля Magento.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!— app/code/local/Envato/WidgetLinks/etc/config.xml —>
<?xml version=»1.0″?>
<config>
  <modules>
    <Envato_WidgetLinks>
      <version>0.0.1</version>
    </Envato_WidgetLinks>
  </modules>
  <global>
    <helpers>
      <widgetlinks>
        <class>Envato_WidgetLinks_Helper</class>
      </widgetlinks>
    </helpers>
    <blocks>
      <widgetlinks>
        <class>Envato_WidgetLinks_Block</class>
      </widgetlinks>
    </blocks>
    <models>
      <widgetlinks>
        <class>Envato_WidgetLinks_Model</class>
      </widgetlinks>
    </models>
  </global>
</config>

Теперь для интересного: давайте app/code/local/Envato/WidgetLinks/etc/widget.xml файл app/code/local/Envato/WidgetLinks/etc/widget.xml и вставим в него следующее содержимое.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<!— app/code/local/Envato/WidgetLinks/etc/widget.xml —>
<?xml version=»1.0″?>
<widgets>
  <widgetlinks_links type=»widgetlinks/links» translate=»name description» module=»widgetlinks»>
    <name>Print and Inquiry Options</name>
    <description>Allows to add Print and Inquiry link options</description>
    <parameters>
      <link_options>
        <label>Link Options</label>
        <visible>1</visible>
        <required>1</required>
        <type>multiselect</type>
        <source_model>widgetlinks/options</source_model>
      </link_options>
    </parameters>
  </widgetlinks_links>
</widgets>

Давайте разберемся с этим файлом немного подробнее. Сначала мы объявляем наш виджет, оборачивая его, используя уникальный идентификатор widgetlinks_links . Далее, атрибут type используется для сопоставления имени файла виджета — в нашем случае это будет app/code/local/Envato/WidgetLinks/Block/Links.php . Атрибуты translate и module говорят сами за себя.

Кроме того, поскольку мы хотим предоставить конфигурацию для нашего виджета, мы объявили об этом с помощью тегов <parameters> . Вы можете объявить столько параметров, сколько вы хотите предоставить, но в нашем случае это только один параметр с именем <link_options> . Это будет простой раскрывающийся список с двумя вариантами выбора: «Печать» и «Связаться с нами». И да, <source_model> отображается на файл модели app/code/local/Envato/WidgetLinks/Model/Options.php , откуда мы получим наши параметры для раскрывающегося app/code/local/Envato/WidgetLinks/Model/Options.php .

Далее давайте создадим файл модели app/code/local/Envato/WidgetLinks/Model/Options.php .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<?php
// app/code/local/Envato/WidgetLinks/Model/Options.php
class Envato_WidgetLinks_Model_Options {
/**
  * Provide available options as a value/label array
  *
  * @return array
  */
  public function toOptionArray() {
    return array(
      array(‘value’ => ‘print’, ‘label’ => ‘Print Button’),
      array(‘value’ => ’email’, ‘label’ => ‘Inquiry Email Button’),
    );
  }
}

Это нуждается в каком-либо объяснении? Он просто используется для возврата параметров нашего раскрывающегося списка конфигурации!

В дальнейшем создайте файл app/code/local/Envato/WidgetLinks/Block/Links.php и вставьте в него следующий код.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
// app/code/local/Envato/WidgetLinks/Block/Links.php
class Envato_WidgetLinks_Block_Links extends Mage_Core_Block_Abstract implements Mage_Widget_Block_Interface {
/**
  * Produce links list rendered as html
  *
  * @return string
  */
  protected function _toHtml() {
    $html = »;
    $link_options = $this>getData(‘link_options’);
      
    if (empty($link_options)) {
      return $html;
    }
      
    $arr_options = explode(‘,’, $link_options);
      
    if (is_array($arr_options) && count($arr_options)) {
      foreach ($arr_options as $option) {
        Switch ($option) {
          case ‘print’:
            $html .= ‘<div><a href=»javascript: window.print();»>Print</a></div>’;
          break;
          case ’email’:
            $html .= ‘<div><a href=»mailto:[email protected]&subject=Inquiry»>Contact Us</a></div>’;
          break;
        }
      }
    }
     
    return $html;
  }
}

Это файл, который будет выполнять реальную работу по отображению ссылок виджета во внешнем интерфейсе. Сначала мы выбираем значение переменной конфигурации link_options используя следующий фрагмент кода.

$link_options = $this>getData('link_options');

Это просто выбранные параметры администратором сайта при настройке виджета на странице CMS. Остальная часть кода довольно проста для понимания, поскольку мы просто подготавливаем вывод html в соответствии с настроенными параметрами.

Наконец, нам нужно создать файл app/code/local/Envato/WidgetLinks/Helper/Data.php только для того, чтобы убедиться, что система перевода Magento работает правильно. Это почти пустой файл, но он должен быть там! Итак, давайте создадим это.

1
2
3
4
5
6
7
8
<?php
// app/code/local/Envato/WidgetLinks/Helper/Data.php
/**
  * Sample Widget Helper
  */
class Envato_WidgetLinks_Helper_Data extends Mage_Core_Helper_Abstract
{
}

Спасибо за терпение, мы почти сделали это! В следующем разделе мы увидим, как использовать наш пользовательский виджет на внутренних страницах CMS.

Теперь удалите все кеши из задней части Magento и убедитесь, что наш модуль включен. После этого перейдите в CMS> Страницы и добавьте новую страницу CMS, используя Добавить новую страницу . Заполните необходимую информацию по мере необходимости, и пока вы находитесь на вкладке « Содержимое », в редакторе WYSIWYG появляется значок, как показано ниже.

Значок виджета в фоновом режиме

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

Интерфейс Вставки Виджета

В поле Тип виджета выберите наш пользовательский виджет Параметры печати и запроса . Когда вы выбираете это, он должен показать опцию конфигурации Link Options . Выберите нужные параметры и нажмите кнопку « Вставить виджет» , чтобы вставить наш виджет на страницу CMS. Вот как это выглядит после вставки на страницу CMS.

Виджет в редакторе

Теперь сохраните страницу CMS после заполнения всей необходимой информации и перейдите во внешний интерфейс, чтобы посмотреть, как она выглядит!

Демонстрация виджетов во Front-End

Итак, как вы можете видеть, на странице CMS в интерфейсе Magento отображаются две ссылки: « Распечатать и связаться с нами» . Так что это был очень простой пример для понимания концепции виджетов, и я надеюсь, что вы сможете расширить ее до чего-то более полезного в вашем случае в соответствии с вашими требованиями.

Виджеты в Magento предоставляют способ расширить функциональные возможности интерфейса, особенно для нетехнических администраторов сайта. Кроме того, Magento позволяет создавать собственные виджеты в соответствии с вашими требованиями, которые также очень просты в настройке.

Поэтому я надеюсь, что этот урок помог вам понять концепцию виджетов и разработку пользовательских виджетов! Ждем ваших мыслей в корме ниже!