Помощь Опции и варианы в плагине "Слайдер товаров"

myfavoriteday

Пользователь
Регист
20 Дек 2017
Сообщения
0
Симпатии
1
#1
Всем привет.
Имеется плагин "Слайдер товаров"
Помогите в нем вывести характеристики (опции) и варианты.
Спасибо!
 

Катерина

Premium+
Developer
Регист
12 Дек 2017
Сообщения
19
Симпатии
14
#2
Т.к мне надо было выводить по id товара, и количество товаров в CMS у меня не превышало 1000 то эту задачу решила так

Этот код из файла slider-products\index.php
PHP:
  $sql = '
      SELECT distinct p.id,
        CONCAT(c.parent_url,c.url) as category_url,
        p.url as product_url,
        p.*,pv.product_id as variant_exist,
        rate,(p.price_course + p.price_course * (IFNULL(rate,0))) as `price_course`,
        p.currency_iso
      FROM `' . PREFIX . 'product` p
      LEFT JOIN `' . PREFIX . 'category` c
        ON c.id = p.cat_id
      LEFT JOIN `' . PREFIX . 'product_variant` pv
        ON p.id = pv.product_id
     WHERE  ' . $filter.' LIMIT 0, '.$countProduct;
  $res = DB::query($sql);
  //$catalog = new Models_Catalog();
  //$products = $catalog->getListByUserFilter($countProduct, $filter);
   $products = array();
  while ($row = DB::fetchArray($res)) {
     $products[] = $row;
   }
Я поменяла на
PHP:
$catalog = new Models_Catalog();
$products_arr = $catalog->getListByUserFilter(1000, $filter);
$products = $products_arr['catalogItems'];
И чтобы нормально работали кнопки, после начала цикла foreach ($products as $item) { (к стати надо его немного поменять на foreach ($products as $k=>$item) { )
прописала эти строки
PHP:
$product_am = new Models_Product;
$liteFormData = $product_am->createPropertyForm($param = array(
          'id' => $item['id'],
          'maxCount' => $item['count'],
          'productUserFields' => $item['thisUserFields'],
          'action' => "/catalog",
          'method' => "POST",
          'ajax' => true,
          'blockedProp' => $blockedProp,
          'noneAmount' => false,
          'titleBtn' => "В корзину",
          'blockVariants' => $blocksVariants[$item['id']],
          'buyButton' => $buyButton
        ));

        $products[$k]['buyButton'] = $liteFormData['html'];
Кнопки теперь выводятся так <div class="product-buttons">'.$products[$k]['buyButton'].'</div>

А сами характеристики так <div class="value">'.$item['thisUserFields'][80]['value'].'</div> где 80 это id характеристики
 

myfavoriteday

Пользователь
Регист
20 Дек 2017
Сообщения
0
Симпатии
1
#3
Т.к мне надо было выводить по id товара, и количество товаров в CMS у меня не превышало 1000 то эту задачу решила так

Этот код из файла slider-products\index.php
PHP:
  $sql = '
      SELECT distinct p.id,
        CONCAT(c.parent_url,c.url) as category_url,
        p.url as product_url,
        p.*,pv.product_id as variant_exist,
        rate,(p.price_course + p.price_course * (IFNULL(rate,0))) as `price_course`,
        p.currency_iso
      FROM `' . PREFIX . 'product` p
      LEFT JOIN `' . PREFIX . 'category` c
        ON c.id = p.cat_id
      LEFT JOIN `' . PREFIX . 'product_variant` pv
        ON p.id = pv.product_id
     WHERE  ' . $filter.' LIMIT 0, '.$countProduct;
  $res = DB::query($sql);
  //$catalog = new Models_Catalog();
  //$products = $catalog->getListByUserFilter($countProduct, $filter);
   $products = array();
  while ($row = DB::fetchArray($res)) {
     $products[] = $row;
   }
Я поменяла на
PHP:
$catalog = new Models_Catalog();
$products_arr = $catalog->getListByUserFilter(1000, $filter);
$products = $products_arr['catalogItems'];
И чтобы нормально работали кнопки, после начала цикла foreach ($products as $item) { (к стати надо его немного поменять на foreach ($products as $k=>$item) { )
прописала эти строки
PHP:
$product_am = new Models_Product;
$liteFormData = $product_am->createPropertyForm($param = array(
          'id' => $item['id'],
          'maxCount' => $item['count'],
          'productUserFields' => $item['thisUserFields'],
          'action' => "/catalog",
          'method' => "POST",
          'ajax' => true,
          'blockedProp' => $blockedProp,
          'noneAmount' => false,
          'titleBtn' => "В корзину",
          'blockVariants' => $blocksVariants[$item['id']],
          'buyButton' => $buyButton
        ));

        $products[$k]['buyButton'] = $liteFormData['html'];
Кнопки теперь выводятся так <div class="product-buttons">'.$products[$k]['buyButton'].'</div>

А сами характеристики так <div class="value">'.$item['thisUserFields'][80]['value'].'</div> где 80 это id характеристики
Спасибо! Я очень благодарен за ответ и вашу помощь.
Получилось вывести кнопку вашим способом, но характеристики нет.
Можно как то получить ваш код файла? Может что то еще надо сделать.
 

Катерина

Premium+
Developer
Регист
12 Дек 2017
Сообщения
19
Симпатии
14
#4
PHP:
<?php

/*
  Plugin Name: Слайдер товаров
  Description: Выводит в любое место страницы слайдер товаров. В разметкe страницы товара необходимо вставить шорт код: [slider-products] с аргументами. Пример использования:  [slider-products countProduct="6" countPrint="3" categoryId="0" product="1,29,33,47"], где countProduct - количество товаров, countPrint - количество одновременно показываемых товаров, categoryId - id категории из которой выводятся товары. Или [slider-products] с аргументами. Пример использования:  [slider-products countPrint="3" product="1,29,33,47"], где product - перечисление id конкретных товаров для вывода. Все аргументы не обязательны.
  Author: Avdeev Mark
  Version: 1.1.5
 */

/*
  Пример использования.
  В разметке страница товара необходимо вставить шорт код:
  [slider-products countProduct="6" countPrint="3" categoryId="0"]
 */

function sliderProducts($args) {
  $countProduct = !empty($args['countproduct']) ? $args['countproduct'] : 6; //количество товаров в ленте
  $countPrint = !empty($args['countprint']) ? $args['countprint'] : 3; //количество выводимых товаров
  $categoryId = !empty($args['categoryid']) ? $args['categoryid'] : 0; //id категории из которой нужно выводить товары
  $product = !empty($args['product']) ? $args['product'] : ''; //id категории из которой нужно выводить товары
  $filter = $categoryId ? 'c.id = '.$categoryId : '1=1';
  $filter .= ' and p.activity = 1';
  if ($product != '') {
    $filter = '';
    $products = explode(',', $product);
    foreach ($products as $id) {
      $filter .= ' p.id = '.DB::quote($id).' OR';
    }
    $filter = substr($filter, 0, strlen($str)-2);
    $countProduct = count($products);
  }
  $catalog = new Models_Catalog();
  $products = $catalog->getListByUserFilter(1000, $filter);

  $html = '
      <div class="m-p-products recommend">
      <div class="m-p-products-slider">
      <div class="index-slider owl-carousel owl-theme">
    ';
  $currency = MG::getSetting('currency');
  foreach ($products['catalogItems'] as $k=>$item) {
    $product_am = new Models_Product;
    $liteFormData = $product_am->createPropertyForm($param = array(
      'id' => $item['id'],
      'maxCount' => $item['count'],
      'productUserFields' => $item['thisUserFields'],
      'action' => "/catalog",
      'method' => "POST",
      'ajax' => true,
      'blockedProp' => $blockedProp,
      'noneAmount' => false,
      'titleBtn' => "В корзину",
      'blockVariants' => $blocksVariants[$item['id']],
      'buyButton' => $buyButton
    ));

    $products['catalogItems'][$k]['buyButton'] = $liteFormData['html'];

    $imagesUrl = explode("|", $item['image_url']);
    $item["image_url"] = "";
    if (!empty($imagesUrl[0])) {
      $item["image_url"] = $imagesUrl[0];
    }

    if(function_exists('mgImageProductPath')){
      $imgSrc = mgImageProductPath($item['image_url'], $item['id']);
    }else{
      $imgSrc = SITE.'/uploads/thumbs/70_'.$item['image_url'];
    }

    if ($item['count'] == 'много' || $item['count'] == -1){$availability = 'В наличии';}
    else {$availability ='Нет в наличии';}

    $html.='
      <div class="product-wrapper">

        <a class="product-image" href="'.SITE.'/'.$item['category_url'].'/'.$item['product_url'].'" title="'.$item['title'].'">
             <img src="'.$imgSrc.'" alt="'.$item['title'].'" title="'.$item['title'].'" class="mg-product-image">
          </a>

        <div class="product-details">
        <a class="product-name" href="'.SITE.'/'.$item['category_url'].'/'.$item['product_url'].'"><span>'.$item['title'].'</span></a>
        <div class="value">Температура: '.$item['thisUserFields'][53]['value'].'</div>
        <div class="value">Мощность: '.$item['thisUserFields'][67]['value'].'</div>
        <div class="value">Напряжение: '.$item['thisUserFields'][68]['value'].'</div>
        <span class="count-on-storage">

        <span> <span itemprop="availability">
        '.$availability.'
        </span> </span>
        </span>
        <div class="product-footer">
        <div class="product-price">'.MG::priceCourse($item['price_course']).' '.$currency.'</div>
        <div class="product-buttons">'.$products['catalogItems'][$k]['buyButton'].'</div>
      </div>
      </div>
      </div>';
  }

  $html .= '
 </div>
 </div>
 </div>
    <script>
      $(document).ready(function(){

    $(".mg-plugin-slider").owlCarousel({
        loop: true,
        nav: true,
        responsive: {
            0: {
                items: 2,
                margin: 10
            },
            768: {
                items: 3
            },
            990: {
                items                : 4,margin: 16
            }

        }
    });
      });
    </script>
';

  return $html;
}
mgAddMeta('<link href="'.SITE.'/mg-plugins/slider-products/css/style.css" rel="stylesheet" type="text/css">');
mgAddMeta('<script type="text/javascript" src="'.SITE.'/mg-plugins/slider-products/js/jquery.carouFredSel-6.2.0-packed.js" charset="utf-8"></script>');
mgAddShortcode('slider-products', 'sliderProducts');
 

myfavoriteday

Пользователь
Регист
20 Дек 2017
Сообщения
0
Симпатии
1
#6
PHP:
<?php

/*
  Plugin Name: Слайдер товаров
  Description: Выводит в любое место страницы слайдер товаров. В разметкe страницы товара необходимо вставить шорт код: [slider-products] с аргументами. Пример использования:  [slider-products countProduct="6" countPrint="3" categoryId="0" product="1,29,33,47"], где countProduct - количество товаров, countPrint - количество одновременно показываемых товаров, categoryId - id категории из которой выводятся товары. Или [slider-products] с аргументами. Пример использования:  [slider-products countPrint="3" product="1,29,33,47"], где product - перечисление id конкретных товаров для вывода. Все аргументы не обязательны.
  Author: Avdeev Mark
  Version: 1.1.5
*/

/*
  Пример использования.
  В разметке страница товара необходимо вставить шорт код:
  [slider-products countProduct="6" countPrint="3" categoryId="0"]
*/

function sliderProducts($args) {
  $countProduct = !empty($args['countproduct']) ? $args['countproduct'] : 6; //количество товаров в ленте
  $countPrint = !empty($args['countprint']) ? $args['countprint'] : 3; //количество выводимых товаров
  $categoryId = !empty($args['categoryid']) ? $args['categoryid'] : 0; //id категории из которой нужно выводить товары
  $product = !empty($args['product']) ? $args['product'] : ''; //id категории из которой нужно выводить товары
  $filter = $categoryId ? 'c.id = '.$categoryId : '1=1';
  $filter .= ' and p.activity = 1';
  if ($product != '') {
    $filter = '';
    $products = explode(',', $product);
    foreach ($products as $id) {
      $filter .= ' p.id = '.DB::quote($id).' OR';
    }
    $filter = substr($filter, 0, strlen($str)-2);
    $countProduct = count($products);
  }
  $catalog = new Models_Catalog();
  $products = $catalog->getListByUserFilter(1000, $filter);

  $html = '
      <div class="m-p-products recommend">
      <div class="m-p-products-slider">
      <div class="index-slider owl-carousel owl-theme">
    ';
  $currency = MG::getSetting('currency');
  foreach ($products['catalogItems'] as $k=>$item) {
    $product_am = new Models_Product;
    $liteFormData = $product_am->createPropertyForm($param = array(
      'id' => $item['id'],
      'maxCount' => $item['count'],
      'productUserFields' => $item['thisUserFields'],
      'action' => "/catalog",
      'method' => "POST",
      'ajax' => true,
      'blockedProp' => $blockedProp,
      'noneAmount' => false,
      'titleBtn' => "В корзину",
      'blockVariants' => $blocksVariants[$item['id']],
      'buyButton' => $buyButton
    ));

    $products['catalogItems'][$k]['buyButton'] = $liteFormData['html'];

    $imagesUrl = explode("|", $item['image_url']);
    $item["image_url"] = "";
    if (!empty($imagesUrl[0])) {
      $item["image_url"] = $imagesUrl[0];
    }

    if(function_exists('mgImageProductPath')){
      $imgSrc = mgImageProductPath($item['image_url'], $item['id']);
    }else{
      $imgSrc = SITE.'/uploads/thumbs/70_'.$item['image_url'];
    }

    if ($item['count'] == 'много' || $item['count'] == -1){$availability = 'В наличии';}
    else {$availability ='Нет в наличии';}

    $html.='
      <div class="product-wrapper">

        <a class="product-image" href="'.SITE.'/'.$item['category_url'].'/'.$item['product_url'].'" title="'.$item['title'].'">
             <img src="'.$imgSrc.'" alt="'.$item['title'].'" title="'.$item['title'].'" class="mg-product-image">
          </a>

        <div class="product-details">
        <a class="product-name" href="'.SITE.'/'.$item['category_url'].'/'.$item['product_url'].'"><span>'.$item['title'].'</span></a>
        <div class="value">Температура: '.$item['thisUserFields'][53]['value'].'</div>
        <div class="value">Мощность: '.$item['thisUserFields'][67]['value'].'</div>
        <div class="value">Напряжение: '.$item['thisUserFields'][68]['value'].'</div>
        <span class="count-on-storage">

        <span> <span itemprop="availability">
        '.$availability.'
        </span> </span>
        </span>
        <div class="product-footer">
        <div class="product-price">'.MG::priceCourse($item['price_course']).' '.$currency.'</div>
        <div class="product-buttons">'.$products['catalogItems'][$k]['buyButton'].'</div>
      </div>
      </div>
      </div>';
  }

  $html .= '
</div>
</div>
</div>
    <script>
      $(document).ready(function(){

    $(".mg-plugin-slider").owlCarousel({
        loop: true,
        nav: true,
        responsive: {
            0: {
                items: 2,
                margin: 10
            },
            768: {
                items: 3
            },
            990: {
                items                : 4,margin: 16
            }

        }
    });
      });
    </script>
';

  return $html;
}
mgAddMeta('<link href="'.SITE.'/mg-plugins/slider-products/css/style.css" rel="stylesheet" type="text/css">');
mgAddMeta('<script type="text/javascript" src="'.SITE.'/mg-plugins/slider-products/js/jquery.carouFredSel-6.2.0-packed.js" charset="utf-8"></script>');
mgAddShortcode('slider-products', 'sliderProducts');
У меня еще вопрос. В кода указана кнопка В КОРЗИНУ, но у меня КУПИТЬ. Не могу найти как изменить. Подскажите пожалуйста куда копать. Спасибо
 

Катерина

Premium+
Developer
Регист
12 Дек 2017
Сообщения
19
Симпатии
14
#9
Ну не знаю что сказать, т.к. у меня работает.


PHP:
<?php

/*
  Plugin Name: Слайдер товаров
  Description: Выводит в любое место страницы слайдер товаров. В разметкe страницы товара необходимо вставить шорт код: [slider-products] с аргументами. Пример использования:  [slider-products countProduct="6" countPrint="3" categoryId="0" product="1,29,33,47"], где countProduct - количество товаров, countPrint - количество одновременно показываемых товаров, categoryId - id категории из которой выводятся товары. Или [slider-products] с аргументами. Пример использования:  [slider-products countPrint="3" product="1,29,33,47"], где product - перечисление id конкретных товаров для вывода. Все аргументы не обязательны.
  Author: Avdeev Mark
  Version: 1.1.5
*/

/*
  Пример использования.
  В разметке страница товара необходимо вставить шорт код:
  [slider-products countProduct="6" countPrint="3" categoryId="0"]
*/

function sliderProducts($args) {
  $countProduct = !empty($args['countproduct']) ? $args['countproduct'] : 6; //количество товаров в ленте
  $countPrint = !empty($args['countprint']) ? $args['countprint'] : 3; //количество выводимых товаров
  $categoryId = !empty($args['categoryid']) ? $args['categoryid'] : 0; //id категории из которой нужно выводить товары
  $product = !empty($args['product']) ? $args['product'] : ''; //id категории из которой нужно выводить товары
  $filter = $categoryId ? 'c.id = '.$categoryId : '1=1';
  $filter .= ' and p.activity = 1';
  if ($product != '') {
    $filter = '';
    $products = explode(',', $product);
    foreach ($products as $id) {
      $filter .= ' p.id = '.DB::quote($id).' OR';
    }
    $filter = substr($filter, 0, strlen($str)-2);
    $countProduct = count($products);
  }
  $catalog = new Models_Catalog();
  $products = $catalog->getListByUserFilter(1000, $filter);

  $html = '
      <div class="m-p-products recommend">
      <div class="m-p-products-slider">
      <div class="index-slider owl-carousel owl-theme">
    ';
  $currency = MG::getSetting('currency');
  foreach ($products['catalogItems'] as $k=>$item) {
    $product_am = new Models_Product;
    $liteFormData = $product_am->createPropertyForm($param = array(
      'id' => $item['id'],
      'maxCount' => $item['count'],
      'productUserFields' => $item['thisUserFields'],
      'action' => "/catalog",
      'method' => "POST",
      'ajax' => true,
      'blockedProp' => $blockedProp,
      'noneAmount' => false,
      'titleBtn' => "Купить",
      'blockVariants' => $blocksVariants[$item['id']],
      'buyButton' => $buyButton
    ));

    $products['catalogItems'][$k]['buyButton'] = $liteFormData['html'];

    $imagesUrl = explode("|", $item['image_url']);
    $item["image_url"] = "";
    if (!empty($imagesUrl[0])) {
      $item["image_url"] = $imagesUrl[0];
    }

    if(function_exists('mgImageProductPath')){
      $imgSrc = mgImageProductPath($item['image_url'], $item['id']);
    }else{
      $imgSrc = SITE.'/uploads/thumbs/70_'.$item['image_url'];
    }

    if ($item['count'] == 'много' || $item['count'] == -1){$availability = 'В наличии';}
    else {$availability ='Нет в наличии';}

    $html.='
      <div class="product-wrapper">

        <a class="product-image" href="'.SITE.'/'.$item['category_url'].'/'.$item['product_url'].'" title="'.$item['title'].'">
             <img src="'.$imgSrc.'" alt="'.$item['title'].'" title="'.$item['title'].'" class="mg-product-image">
          </a>

        <div class="product-details">
        <a class="product-name" href="'.SITE.'/'.$item['category_url'].'/'.$item['product_url'].'"><span>'.$item['title'].'</span></a>
        <div class="value">Температура: '.$item['thisUserFields'][53]['value'].'</div>
        <div class="value">Мощность: '.$item['thisUserFields'][67]['value'].'</div>
        <div class="value">Напряжение: '.$item['thisUserFields'][68]['value'].'</div>
        <span class="count-on-storage">

        <span> <span itemprop="availability">
        '.$availability.'
        </span> </span>
        </span>
        <div class="product-footer">
        <div class="product-price">'.MG::priceCourse($item['price_course']).' '.$currency.'</div>
        <div class="product-buttons">'.$products['catalogItems'][$k]['buyButton'].'</div>
      </div>
      </div>
      </div>';
  }

  $html .= '
</div>
</div>
</div>
    <script>
      $(document).ready(function(){

    $(".mg-plugin-slider").owlCarousel({
        loop: true,
        nav: true,
        responsive: {
            0: {
                items: 2,
                margin: 10
            },
            768: {
                items: 3
            },
            990: {
                items                : 4,margin: 16
            }

        }
    });
      });
    </script>
';

  return $html;
}
mgAddMeta('<link href="'.SITE.'/mg-plugins/slider-products/css/style.css" rel="stylesheet" type="text/css">');
mgAddMeta('<script type="text/javascript" src="'.SITE.'/mg-plugins/slider-products/js/jquery.carouFredSel-6.2.0-packed.js" charset="utf-8"></script>');
mgAddShortcode('slider-products', 'sliderProducts');
Попробуйте тупо скопировать этот код и вставить в index.php плагина
 
Последнее редактирование:
Сверху Снизу