Jump to content


Photo
- - - - -

Настройка логики кол-ва для каждого товара: min, max, шаг


15 replies to this topic

#1 demfi

demfi
  • JBZoo User (rus)
  • User rate: 1.3
  • posts: 178
  • topics: 51

Posted 04 May 2016 - 11:48

Добрый день.

 

Есть около 100-150 товаров, каждый товар надо настроить так, чтобы при заказе учитывались настройки логики кол-ва: min, max, шаг.

Т.е. один товар можно заказывать мин от 500 штук, с шагом по 500 штук, макс не ограничен

Другой товар можно заказывать мин от 1000 штук, с шагом по 1 штуке, макс не ограничен

Третий товар можно заказывать мин от 100 штук, с шагом по 10 штук, макс не ограничен

и т.д.

 

Электронная коммерция - Шаблоны в материале - Количество: есть все нужные настройки, но они применяются сразу ко всему шаблону, а мне необходимо к каждому товару.

 

Такое возможно реализовать?


  • 0

#2 Cheren-dow

Cheren-dow
  • JBZoo User (rus)
  • User rate: 95.7
  • posts: 5060
  • topics: 31

Posted 04 May 2016 - 15:07

Здравствуйте demfi, элемент кол-ва работает сразу для всех материалов внутри типа - поэтому настройки срабатывают для всех. Путей решений - два. Разделить свои товары на типы и для каждого настроить элемент. Второй - если вы знакомы с API JBZoo и PHP можно изменить элемент кол-ва и научить его работать для каждого материала. Или же обратиться в коммерческий раздел.


  • 0
Posted Image
 

#3 demfi

demfi
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 1.3
  • posts: 178
  • topics: 51

Posted 05 May 2016 - 05:26

Спасибо.

А можно так поступить: все товары в одном типе, добавить нужное кол-во элементов цены в тип, у каждого элемента цены своя настройка, а заполнять только нужную цену для каждого товара?

Т.е. получается делить не товары на типы, а цены?


  • 0

#4 Cheren-dow

Cheren-dow
  • JBZoo User (rus)
  • User rate: 95.7
  • posts: 5060
  • topics: 31

Posted 05 May 2016 - 09:09

Т.е. получается делить не товары на типы, а цены?

К сожалению так не получится, т.к. цена принадлежит типу материала. То что вы описали - это может быть как результат измененного элемента кол-ва, внутри материала можно указывать параметры, но для этого не одну строку кода нужно менять.


  • 0
Posted Image
 

#5 demfi

demfi
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 1.3
  • posts: 178
  • topics: 51

Posted 06 May 2016 - 05:27

Я всё же продолжил копать...

Вот что сделал: добавил в тип кучу элементов цены, в Коммерции настроил кол-во как надо у каждой цены и настроил шаблоны цены.

На каждый элемент ввел только одну цену, остальные не указал просто.

Выяснил, что при 0 цене саму цену можно не показывать, а вот с элементом кол-во и кнопками такого сделать нельзя, почему-то?

На мой взгляд логично, когда цена товара = 0, то и заказать его нельзя, т.е. кол-во и кнопки убрать бы.

ну ладно...

 

пробую в шаблоне цены full делать проверки на 0 цену и в случае 0 переходить к новой итерации (цене), пока без результатно:

<?php
/**
 * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
 * @package     jbzoo
 * @version     2.x Pro
 * @author      JBZoo App http://jbzoo.com
 * @copyright   Copyright (C) JBZoo.com,  All rights reserved.
 * @license     http://jbzoo.com/license-pro.php JBZoo Licence
 * @coder       Alexander Oganov <t_tapak@yahoo.com>
 */

// no direct access
defined('_JEXEC') or die('Restricted access');



/*
if ($this->checkPosition('attributes')) {
    echo '<div class="jbprice-tmpl-full">';
    echo $this->renderPosition('attributes');
    echo '</div>';
}

if ($this->checkPosition('price') || $this->checkPosition('buttons')) { ?>
    <div class="jbprice-detail-buy">
        <div class="jbprice-detail-price">
            <?php echo $this->renderPosition('price'); ?>
        </div>
    </div>

    <div class="jbprice-detail-buttons">
        <?php echo $this->renderPosition('buttons'); ?>
    </div>
<?php }
*/

// список всех вариантов цен - element id
$priceList = [
   '9c42587a-a4cb-4452-9d4a-626710c8cce1', // Цена_КдА_100x10
   '3f43f260-0f19-4dad-884d-07d44695b700' // Цена_КдА_120х12
];

foreach($priceList as $priceId) {

    $jbprice = $item->getElement($priceId);
 
    if(isset($jbprice))
    {
        // Создаем/Получаем объект JBCartVariantList. С ним и работаем.
        $list = $jbprice->getList();

        // Узнаем итоговую стоимость
        $total = $list->getTotal();

        if($total->compare('0 rub', '<=')) {
            echo 'total '.$total;
            break;
        } else {
          echo 'total-2 '.$total;

            if ($this->checkPosition('attributes')) {
            echo '<div class="jbprice-tmpl-full">';
            echo $this->renderPosition('attributes');
            echo '</div>';
        }

        if ($this->checkPosition('price') || $this->checkPosition('buttons')) { ?>
            <div class="jbprice-detail-buy">
                <div class="jbprice-detail-price">
                    <?php echo $this->renderPosition('price'); ?>
                </div>
            </div>

            <div class="jbprice-detail-buttons">
                <?php echo $this->renderPosition('buttons'); ?>
            </div>
        <?php }

        }  
    } 
}


в шаблоне full элемента выводятся все кнопки кол-во и купить, даже у которых цена 0.

 

Подскажите, что доработать в коде.

 


  • 0

#6 demfi

demfi
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 1.3
  • posts: 178
  • topics: 51

Posted 06 May 2016 - 06:17

т.е. задача в шаблоне цены full если цена = 0 ничего не выводить.

Получается будет выводиться только заполненная цена, а все остальные игнориться.


  • 0

#7 Cheren-dow

Cheren-dow
  • JBZoo User (rus)
  • User rate: 95.7
  • posts: 5060
  • topics: 31

Posted 06 May 2016 - 11:18

demfi, вы проверяете код который вставляете?

$total = $list->getTotal();
var_dump($total->val()); // что возвращает?

  • 0
Posted Image
 

#8 Cheren-dow

Cheren-dow
  • JBZoo User (rus)
  • User rate: 95.7
  • posts: 5060
  • topics: 31

Posted 06 May 2016 - 11:22

в total храниться объект JBCartValue, как с ним работать описано в этом топике.


  • 0
Posted Image
 

#9 demfi

demfi
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 1.3
  • posts: 178
  • topics: 51

Posted 06 May 2016 - 12:25

Вот код, в принципе работает, но не хватает логики проверки:

<?php
/**
 * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
 * @package     jbzoo
 * @version     2.x Pro
 * @author      JBZoo App [url=http://jbzoo.com]http://jbzoo.com[/url]
 * @copyright   Copyright (C) JBZoo.com,  All rights reserved.
 * @license     [url=http://jbzoo.com/license-pro.php]http://jbzoo.com/license-pro.php[/url]JBZoo Licence
 * @coder       Alexander Oganov <t_tapak@yahoo.com>
 */
 
// no direct access
defined('_JEXEC') or die('Restricted access');
 
 
 
/*
if ($this->checkPosition('attributes')) {
    echo '<div class="jbprice-tmpl-full">';
    echo $this->renderPosition('attributes');
    echo '</div>';
}
 
if ($this->checkPosition('price') || $this->checkPosition('buttons')) { ?>
    <div class="jbprice-detail-buy">
        <div class="jbprice-detail-price">
            <?php echo $this->renderPosition('price'); ?>
        </div>
    </div>
 
    <div class="jbprice-detail-buttons">
        <?php echo $this->renderPosition('buttons'); ?>
    </div>
<?php }
*/
 
// список всех вариантов цен - element id
 
//var_dump($item->id); // OK
 
 
//$app = App::getInstance('zoo');
 
/*
$item2 = $app->table->item->get($item->id); 
$item2 = $item; 
*/
 
//$element2 = $item->getElement('3f43f260-0f19-4dad-884d-07d44695b700'); // element id получаем так 
//$data = (array)$element2->data(); // получаем данные
//var_dump($data['variations']);
//echo '<span class="jbzoo-info-tara">цена-'.$data['variations'][0]['_value']['value'].'</span>'; // смотрим что там хранится
 
 
$priceList = [
   '9c42587a-a4cb-4452-9d4a-626710c8cce1', // Цена_КдА_100x10
   '3f43f260-0f19-4dad-884d-07d44695b700' // Цена_КдА_120х12
];
 
foreach($priceList as $priceId) {
 
    $jbprice = $item->getElement($priceId); // получаем однин элемент цены
 
    if(isset($jbprice))
    {
        $data = (array)$jbprice->data(); // получаем данные по однин элемент цены
 
        
 
        // Создаем/Получаем объект JBCartVariantList. С ним и работаем.
        //$list = $jbprice->getList();
 
        // Узнаем итоговую стоимость
        //$total = $list->getTotal();
        //echo ($total->val());
        //$price = $list->getPrice();
        //$element = $list->current()->get($priceId);
        //$element_id = $item->getElement(($priceId);
        //$element = $list->current()->get($jbprice);
        //$element = $list->current();
        //var_dump($element);
 
 
 
 
        //if($total->val() <= 0 ) {
        if($data['variations'][0]['_value']['value'] <= 0 ) {
            echo '<hr>'.$data['variations'][0]['_value']['value']. '<hr>';
            //break;
            //continue;
            //return;
        } else {
 
            echo '<hr> 2 '.$data['variations'][0]['_value']['value']. '<hr>';
 
            if ($this->checkPosition('attributes')) {
            echo '<div class="jbprice-tmpl-full">';
            echo $this->renderPosition('attributes');
            echo '</div>';
            }
 
        if ($this->checkPosition('price') || $this->checkPosition('buttons')) { ?>
            <div class="jbprice-detail-buy">
                <div class="jbprice-detail-price">
                    <?php echo $this->renderPosition('price'); ?>
                </div>
            </div>
 
            <div class="jbprice-detail-buttons">
                <?php echo $this->renderPosition('buttons'); ?>
            </div>
        <?php }
 
        }  
    } 
}
 
echo '<br>--------------------------------------------------------------<br>';

  • 0

#10 demfi

demfi
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 1.3
  • posts: 178
  • topics: 51

Posted 10 May 2016 - 08:48

Увы, снова ошибки.

Сделал всё как рекомендовали в этом ответе:

 Разделить свои товары на типы и для каждого настроить элемент. 

 

Сделал тип с одной ценой, эту цену настроил в Коммерции, чтобы по 10 Шаг был.

В шаблоне элемента тизер всё работает отлично, прибавляет по 10 и добавляет в корзину!

Но как только перехожу в корзину, то блок кол-во начинает прибавлять по 1, а не по 10. Глюк?

 

Во вложении синие стрелки - вроде как всё верно, а вот красные - это ошибка?

Attached Thumbnails

  • 1.png

  • 0




Click to return to top of page in style!