октября 15, 2011

PrestaShop для разработчиков: таблица классов.

Как и обещала публикую информацию по работе с классами в PrestaShop, которая будет полезна разработчикам интернет магазинов на данной CMS.
Эта часть является логическим продолжением статьи “PrestaShop инструкция для разработчиков“, опубликованной ранее на моём блоге – web-esse.ru
Сводная таблица наиболее часто изменяемых классов PrestaShop, которым соответствует отдельная таблица в БД.

Название Описание Таблица в БД В классе можно:
Address.php Адреса покупателей, производителей и поставщиков *_address Убрать обязательные поля при регистрации / при заказе
Attachment.php Класс отвечает за вложения добавляемые к продукции *_attachment
Attribute.php Атрибуты продуктов *_attribute
Carrier.php Методы доставки *_carrier
Cart.php Корзина покупателя *_cart
Category.php Категории продукции *_category Добавить поддержку HTML тегов в описание товара
CMS.php Класс работает с статичными страницами магазина *_cms
Currency.php Используемая валюта *_currency Метод getCurrencies понадобится для обновления курса с сайта ЦентраБанка
Customer.php Зарегистрированные пользователи *_currency
Guest.php Незарегистрированные пользователи *_guest
Hook.php Управление хуками в PrestaShop *_hook Добавление нового хука
Meta.php Управление мета информацией (title, keywords, description) *_meta_lang Разный title и заголовок на странице
Order.php Класс пользовательской информации о заказе *_orders

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

Класс Configuration – Работает со всеми конфигурационными данными Prestashop, файл – Configuration.php
Основное назначение: получение конфигурационных данных, с помощью функции get($key, $id_lang = NULL)

Configuration::get('PS_SHOP_DOMAIN')  // метод класса вернёт домен магазина
Configuration::get('PS_SHOP_EMAIL')  //вернёт email владельца
Configuration::get('PS_SHOP_NAME')  //вернёт название магазина
Configuration::get('PS_SHOP_PHONE')  //вернёт телефон владельца
Configuration::updateValue('PS_LAYERED_SHARE', 0) //обновление значения полей - при установке модуля
Configuration::deleteByName('PS_LAYERED_SHARE') //удаление информации из БД, например, при удаление модуля

Класс Tools – полезные инструменты
displayPrice($price, $currency = NULL, $no_utf8 = false) – отображает стоимость в текущем формате
getMetaTags($id_lang, $page_name) – возвращает мета теги для указанной страницы
link_rewrite($str, $utf8_decode = false) – возвращает чпу из строки
addJS($js_uri) – добавляет скрипт в заголовок
addCSS($css_uri, $css_media_type = ‘all’) – добавляет стили в заголовок
setCurrency() – установка текущей валюты (решение проблемы разной валюты в импортируемом файле и витрине магазина)
getValue($key, $defaultValue = false) – возвращает значение из $_POST / $_GET, на входе принимает имя поле и дефолтное значение, которое возвращается если поле в массиве отсутствует
пример:

$qty = (int)(abs(Tools::getValue('qty', 1)));
$id_cms = (int)Tools::getValue('id_cms');

Класс Validate
isEmail($email) – валидация Email
isName($name) – должны отсутствовать символы 0-9!<>,;?=+()@#”°{}_$%:, т.е допустимы только буквы
isMessage($message) – должны отсутствовать символы ^<>{}
isAddress($address) – должны отсутствовать символы !<>?=+@{}_$%
isCleanHtml($html) убирает из кода скрипты
isPhoneNumber($phoneNumber) – цифры, скобки и тире
isPostCode($postcode) – можно использовать a-zA-Z 0-9-
isUrl($url) – валидный юрл

Validate::isLoadedObject($this->cms)

Есть и другие классы, но по ним у меня накопилось столько наработок и материала, что им будут посвящены отдельные посты:
Db.php – Класс по работе с БД
Link.php – подключаем отдельный хостинг для изображений
Mail.php – отправка почты
Module.php – незаменим при написании собственных модулей
PDF.php – генерация pdf с поддержкой кириллицы

Архитектура PredstaShop построена на системе классов, основные из них рассмотрены в этом посте, вся информация сведена в удобную таблицу.


Комментарии

  • Rain3r

    Спасибо за описания классов, очень полезные в работе. Не затягивайте с обещанными статьями о ПДФ и БД – жду с нетерпением!

    • Пожалуйста! Постараюсь выделить время.

  • Добрый день!

    Скажите, пожалуйста, что такое функция link_rewrite и для чего она нужна? Спасибо

    • Добрый день.
      Статичный метод link_rewrite класса Tools – подготавливает строку к использованию её в юрл – убирает из строки не дружественные для чпу символы – : и т.п, преобразует регистр, убирает пробелы.

  • Наталья

    Здравствуйте!
    Во-первых, спасибо за полезный сайт, уже несколько раз прибегала к его советам.
    Теперь по существу. Где и что нужно поменять в файлах или БД, чтобы у страниц CMS Prestasop 1.5 выводились не названием страницы, а keywords-ом или description-ом? Подозреваю, нужно править public static function getCmsMetas($id_cms, $id_lang, $page_name) в /classes/Meta.php, но что именно?..

    • Наталья

      Разобралась. Если кому пригодится.

      В упомянутой выше функции

      $row['meta_title'] = $row['meta_title'].’ – ‘.Configuration::get(‘PS_SHOP_NAME’); return Meta::completeMetaTags($row, $row['meta_title']);

      заменить на

      $row['meta_title'] = $row['meta_description'].’ – ‘.Configuration::get(‘PS_SHOP_NAME’);
      return Meta::completeMetaTags($row, $row['meta_title']);

  • Александр

    Подскажите, пожалуйста, как вытащить информацию из таблицы _address из поля – “other”? Для того, чтобы добавить “Дополнительную информацию”, которую указывают клиенты при заказе в счет. Можно это сделать с помощью – Configuration::get? Если вставляю – Configuration::get(‘PS_SHOP_NAME’) в файл PDF.php – то в счете появляется название магазина.

    • Нет, через Configuration::get можно только константы магазина вывести, это поле через работу с классом адреса нужно вытаскивать. Преста какая?

      • Александр

        1.4.4.0
        Если добавить сточку – ‘.($addressInvoice->other).’ в файл – AdminOrders.php то добавляет еще одно поле с “Дополнительной информацией”.

        Но я не очень силен в делах программирования)) Поэтому приходится делать все – методом научного тыка))

        • Вам нужно с классом PDF.php работать, в AdminOrders не нужно ничего делать. Как один из вариантов решения добавить нужное поле в шаблон $patternRules (примерно 351 строка)

          • Александр

            В файле PDF.php прописал поле ‘other’,

            $patternRules = array(

            ‘avoid’ => array(

            ‘address2′,

            ‘company’,

            ‘phone’,

            ‘other’,

            ‘phone_mobile’));

            Ничего не изменилось))

  • Юрий

    Сори, если не туда пишу…

    версия 1,6,0,9. Подскажите, пожалуйста, как можно изменить расположение полей Адреса (оформление заказа – 2 шаг). Нужно не просто порядок поменять в настройках страны, а расположить например двумя столбцами (блоками), чтобы слева расположить фамилия, имя, телефон, а справа уже адрес. Уже все перекопал! Вижу что вроде формируется массив, который потом просто списком выводится в порядке определенном в админке в настройках страны. Но где формируется этот массив и где выводится – не могу определить. Дошел до того что в order-address используется id=address_delivery…

    Помогите найти края

    • Может не до конца поняла задачу…. но самое простое решение: в тпл сделать 2 блока и отверстать их как нужно.