Очень часто при работе с системой OpenCart возникает потребность создать  свой модуль ostore собственного расширения, которое придаст разрабатываемому магазину новой функциональности, необходимой именно вам. Для примера, нам понадобился вывод прайс-листа для магазина.

Готовых решений не нашлось, пришлось разработать собственное расширение. Именно на основе этого, созданного мной расширения, я и буду подробно рассказывать о процессе создания расширений.

MVC в Opencart

Для начало важно понять, что для создания какого либо нового функционала в OpenCart, надо реализовать хорошо сделаные его составляющие (MVC)  четыре:

model содержит в себе функционал по работе с базой данных. Хранится в catalog\model\. При создании своего расширения я создал в этой папке новый каталог pricelist, а в нем файл price.php. Тоесть получили: catalog\model\pricelist\price.php. В этом файле будем создавать функции по выборки данных из базы. В случае когда вам не нужна работа с базой данных, можете просто не создавать модель. Расширение может работать и без нее.
view отвечает за вывод данных, то есть шаблон, формирующий html код. Хранится в catalog\view\theme\ХХХХХ\template, где ХХХХХ – каталог используемой вами темы (eсли вы используете стандартную тему, то ХХХХХ это default). По аналогии я создал папку и файл, и таким образом получил: catalog\view\theme\default\template\pricelist\price.tpl. В этом файле будем создавать шаблон вывода прайс-листа.
controller – отвечает за обработку всех выбранных из базы данных, и формирует данные для вывода в шаблоне. Аналогично первым двум пунктам, создаем каталог и файл контроллера в нужном разделе:catalog\controller\pricelist\price.php.
language – представляет собой файл, в котором можна задавать некие языковые переменные для разных языков. В моем случае это catalog\language\english\pricelist\price.php. При ненадобности, этот файл можно не создавать.

Создание языкового файла

В файле catalog\language\english\pricelist\price.php вносим все наши названия в формате - переменная/значение примерно так:

КОД: ВИДІЛИТИ ВСЕ
$_['heading_title'] = 'Price List';

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

Создание модели

Перейдем к созданию модели, мы разместим свой файл в catalog\model\pricelist\price.php.

Все функции и переменные модели и контроллера должны быть членами класса. Для функций модели название класса имеет вид: ModelХХХХХYYYYY, где ХХХХХ – в нашем случае название папки (pricelist), а YYYYY – название файла (price).

Класс прайслиста я назвал Modelpricelistprice.

В OpenCart в названиях файлов, переменных и т.п. очень часто используется именно такая система, основанная на вложенности каталогов и файлов в фаловой системе сайта. То есть, если бы файл вашей модели находился бы сразу в каталоге catalog\model\, и имел имя mymodel, то класс надо было бы назвать Modelmymodel.

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

class Modelpricelistprice extends Model {

}
Далее в этом классе создаем функции для работы с базой данных магазина. При создании прайс-листа мне понадобилось создать две функции: public function get_subcategories($category_id) – возвращающая массив всех подкатегорий для данной категории, заданной ее идентификатором. public function get_products($category_id) – возвращающая массив всех товаров, находящихся в данной категории.

Создание контроллера

Теперь создадим файл catalog\controller\pricelist\price.php. Его класс будет иметь вид: class ControllerPriceListPrice extends Controller …

При вызове контроллера по умолчанию вызывается функция index(). Что бы использовать функции из модели ( для получения данных) необходимо их подключить:

КОД: ВИДІЛИТИ ВСЕ
$this->load->model('pricelist/price');

Аналогичным образом можна подключать любую другую модель. Например модель OpenCart для работы с товарами подключаем так:

КОД: ВИДІЛИТИ ВСЕ
$this->load->model('catalog/product');

Теперь можно вызывать функции модели :

КОД: ВИДІЛИТИ ВСЕ
$tmp_categories = $this->model_pricelist_price->get_subcategories($category_id);

Так же подключаем наш языковой файл:

КОД: ВИДІЛИТИ ВСЕ
$this->language->load('pricelist/price');

Инициализируем языковые переменные:

КОД: ВИДІЛИТИ ВСЕ
$this->language->get(’VVVVVV’),

где VVVVVV – название переменной. Например, для вызова заголовка я пишу: $this->language->get(’heading_title’); Данные, которые будем выводить в шаблоне необходимо записать в $this->data[’VVVVV’], где VVVVV – имя переменной, которая будет доступна в шаблоне вывода. Например, при создании прайс-листа я записал: $this->data['category'] = $this->category;

Таким образом в файле шаблона price.tpl будет доступной переменная $category, в которой будет записан массив всех категорий. По моему исходному коду вы далее разберетесь как организовать код своего контроллера.

Создание шаблона

В файле catalog\view\theme\default\template\pricelist\price.tpl, описываем HTML код страницы, на которой выводится наш прайс-лист. В шаблоне используются такие переменные:
Переменные системы OpenCart: $header, $column_left, $column_right, $footer.
Переменные, которые передал контроллер: $heading_title, $main_title, $category $product. При создании шаблона вы должны сверстать его под свой конкретный сайт.

Интеграция расширения на сайт

Когда вы написали все составляющие своего расширения, необходимо где либо на вашем сайте добавить ссылку на расширение. Например когда я интегрировал прай-лист на магазин, в шаблоне хедераcatalog\view\theme\tiens\template\common\header.tpl в нужном месте я добавил такой код:

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

   
© 2012 Программирование в удовольствие Яндекс.Метрика Suffusion theme by Sayontan Sinha