Совместные хелперы для магазина

5

Предлагаю сделать раздел хелперов в Гит хаб, а лучше веб интерфейс прямо на сайте developers.webasyst.ru, чтобы люди могли добавлять методы. Например хелпер корзины витрины - shopFrontendCartHelper, shopFrontendProductsHelper и тд.... В гите или на сайте люди будут постить новые методы с описанием использования, чтобы в дальнейшем наиболее нужные попадали в обновления!

4 комментария

  • +2

    Вот первый хелпер корзины: shopFrontendCartHelper.class.php

    <?php
    
    class shopFrontendCartHelper
    {
        /*
         * Метод возвращает массив позиций корзины,
         *  где каждая позиция (ячейка массива) имеет данные:
         *  id - id позиции в корзине (item_id)
         *  product_id - id продукта
         * name - имя позиции в корзине с учетом названия артикула (sku)
         * quantity - количество данного артикула в корзине
         * sku_id - id артикула продукта
         * sku_code - код артикула
         * sku_name - имя артикула
         * image_url - адрес картинки продукта
         * frontend_url - адрес продукта с учетом поселения
         * price - цена за один продукт
         * services - массив сервисов артикула (sku)
         * full_price - общая цена продукта с учетом количества и сервисов
         *
         */
       public static function getCartItems()
       {
           $code = waRequest::cookie('shop_cart');
           if (!$code) {
               return array();
           }
           $cart = new shopCart($code);
           $rows = $cart->items();
           $items = array();
           foreach($rows as $row) {
               $item = array();
               foreach (array('id', 'product_id', 'name', 'quantity', 'sku_id', 'sku_code', 'sku_name') as $key) {
                   $item[$key] = $row[$key];
               }
               $p = $row['product'];
               $item['image_url'] = shopImage::getUrl(array(
                   'product_id' => $row['product_id'],
                   'filename' => $p['image_filename'],
                   'id' => $p['image_id'],
                   'ext' => $p['ext']
               ), "96x96");
               $item['frontend_url'] = wa()->getRouteUrl('shop/frontend/product', array(
                   'product_url' => $p['url'], 'category_url' => ifset($p['category_url'], '')));
               $item['price'] = self::currencyFormat($row['price'], $row['currency']);
               $price = shop_currency($row['price'] * $row['quantity'], $row['currency'], null, false);
               $item['services'] = array();
               if (!empty($row['services'])) {
                   foreach ($row['services'] as $s) {
                       $item_s = array();
                       foreach (array('id', 'parent_id', 'name', 'quantity', 'service_id', 'service_name', 'service_variant_id', 'variant_name') as $key) {
                           if (isset($s[$key])) {
                               $item_s[$key] = $s[$key];
                           }
                       }
                       $item_s['price'] = self::currencyFormat($s['price'], $s['currency']);
                       $price += shop_currency($s['price'] * $s['quantity'], $s['currency'], null, false);
                       $item['services'][] = $item_s;
                   }
               }
               $item['full_price'] = self::currencyFormat($price, true);
               $items[] = $item;
           }
           return $items;
       }
        public static function currencyFormat($val, $currency = true, $html = false)
        {
            return $html ? shop_currency_html($val, $currency) : shop_currency($val, $currency);
        }
    }
    
  • +5
    km km Партнер-разработчик 9 августа 2016 10:54 #

    Чтобы попасть в обновления вы можете делать pull-request в репозиторий shop-script.

    А так да, можно сделать такую небольшую свалку хелперов.

    • +2

      Гитом далеко не все пользуются, плюс необходимо запрашивать доступ к магазину, а если сделать интерфейс где будут все хелперы и в каждом будет простая форма "Добавить метод". При добавлении будет несколько полей название метода, описание и код метода.

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

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