Перейти к содержимому


Фотография
- - - - -

Как получить цену товара в шаблоне цены? Вопрос по php


Лучший Ответ Владимир Лозицкий , 24 May 2017 - 15:55

Спасибо CB9TOIIIA

Я все таки разобрался и переписал правильно.

Если кому интересно код ниже.

if ($this->checkPosition('list')) {
    $juser=JFactory::getUser();
    $groups = $juser->get('groups');
    
            if (!in_array('10', $groups)) {/** если пользователь НЕ ВХОДИТ в группу ПРОФЕССИОНАЛЫ **/ 

                    /** ID переменной определяющей скрывать ли цену для непрофессионалов **/ 
                    switch ($item->type) {
                        case "cosmetic-lanza";
                            $CB_price = 'a0b1155b-8224-40f5-845b-ca81da5c2351';
                            break;
                        case "cosmetic-insight":
                            $CB_price = 'fca32c48-0ffc-478f-8549-d22b7f4a4d10';
                            break;
                        case "cosmetic-innovatis":
                            $CB_price = '4b486488-f08e-4cba-8897-f3971f5e2223';
                            break;                        
                    }           

                    $Quest = (array)$item->getElement($CB_price)->data()['option'];
                    $Key= $Quest[0];            
                    if ($Key=='net') { /** net - отсутствие ограничений на показ цены **/ 
                        echo '<div>';
                        echo $this->renderPosition('list');
                        echo '</div>';   
                        }
                else {
                    echo "<a class='need-get-price' href='/full-access'> Узнать цену </a>";
                }
            }     
    }

Самая главная моя ошибка была в том что $CB_price для каждого сайта своя. И ID  значение можно в полях JBZooApp (серая шестеренка)

 

В этом коде я определяю входит ли пользователь в определенную группу, и если не входит, то проверяю что установлено в поле показа цены цены только для одной группы. 


Это кстати был код одного из шаблонов вывода цены.

Перейти к сообщению


Сообщений в теме: 18

#11 Владимир Лозицкий

Владимир Лозицкий

Отправлено 11 May 2017 - 09:23

Логично. Получается я не тем путем пошел.

А можно спросить full и тизер в какой папке лежат, чтоб я не то ковырять не начал.



#12 CB9TOIIIA

CB9TOIIIA

Отправлено 11 May 2017 - 09:25

http://jbzoo.ru/docs...ize-like-demo-1


  • 0

#13 Владимир Лозицкий

Владимир Лозицкий

Отправлено 11 May 2017 - 09:48

в full.php ввел код

 

 
        <?php if ($this->checkPosition('price')) : ?>
            <div class="uk-width-medium-1-2">
                <div class="item-price">
                    <?php 
                        $CB_price = 'f4483451-befa-4f92-b5bf-e2e9c3e90283';
                        $CB_SKU = $this->_item->getElement($CB_price)->data()->variations;
                        $CB_SKU_App = $this->app->data->create($CB_SKU);
                        $CB_SKU = $CB_SKU_App->find('0._sku.value');
                        $Value_Price = $CB_SKU_App->find('0._value.value');                    
                     ?>                    
                    <?php echo $this->renderPosition('price'); ?>
                </div>
            </div>
        <?php endif; ?>
 
Опять получил ошибку в строке 
                        $CB_SKU = $this->_item->getElement($CB_price)->data()->variations;
 
Причем 
  1. $DataVIP = (array)$item->getElement('02f2fc89-6bd6-4797-bd71-2783220d7d74')->data();

Также дает ошибку



#14 CB9TOIIIA

CB9TOIIIA

Отправлено 11 May 2017 - 10:09

в full - можете $item вместо: $this->_item использовать.

 

Собственно не знаю чем помочь, код работает у меня на проекте.


  • 0

#15 Владимир Лозицкий

Владимир Лозицкий

Отправлено 11 May 2017 - 10:32

Мне непонятно что такое $CB_price = 'f4483451-befa-4f92-b5bf-e2e9c3e90283' ??



#16 CB9TOIIIA

CB9TOIIIA

Отправлено 11 May 2017 - 10:33

Мне непонятно что такое $CB_price = 'f4483451-befa-4f92-b5bf-e2e9c3e90283' ??

 

element_id цены


  • 0

#17 Владимир Лозицкий

Владимир Лозицкий

Отправлено 12 May 2017 - 09:33

Короче если кому интересно я разобрался, правда сделал немного не так как планировалось

Задача

Сделать так чтобы не цена (а также артикул, кнопки и все поля что настраиваются в шаблоне цены в материале) не выводилась в карточке товара full, если цена товара 0.

 

Решение

Правим

..media\zoo\applications\jbuniversal\framework\render\jbprice.php

функция 

renderPosition


    public function renderPosition($position, $args = array())
    {

        // init vars
        $elements = array();
        $output   = array();
        $_index   = 0;

        // get style
        $style = isset($args['style']) ? 'jbprice.' . $args['style'] : 'jbprice.default';

        // store layout
        $layout = $this->_layout;
        foreach ($this->getConfigPosition($position) as $index => $data) {

            if ($element = $this->_variant->get($data['identifier'])) {
                if (!$element->canAccess()) {
                    continue;
                }
                // Backward Compatibility. Delete later.
                if (!is_numeric($index)) {
                    $index = $_index++;
                }

                $data['_price_layout'] = $this->itemLayout;

                $data['_layout']   = $this->_layout;
                $data['_position'] = $position;
                $data['_index']    = $index;

                // set params
                $params   = array_merge($data, $args);
                $hasValue = $element->hasValue(new AppData($params));
                if (!$hasValue && $element->isCore()) {
                    $hasValue = $params['_isEmpty'] = true;
                }

                if ($hasValue) {
                    $elements[] = compact('element', 'params');
                }
            }
        }
        $count = count($elements);
        foreach ($elements as $i => $data) {
            $params = array_merge(array('first' => ($i === 0), 'last' => ($i === $count - 1)), $data['params']);
            $data['element']->setIndex($params['_index'])->setPosition($params['_position'])->loadAssets();
            $DataPrice=$data['element']->GetValue();
          
            if (is_object($DataPrice)) {
                if ($DataPrice->Val()==0){
                    $NotResult=True;
                }
            }

            $output[$i] = parent::render('element.' . $style, array(
                'element' => $data['element'],
                'params'  => new AppData($params)
            ));
        }
        $this->_layout = $layout;
        if ($NotResult ) {
            return;
            }
        else
        {
            return implode(PHP_EOL, $output);
        }
    }

В общем то добавления небольшие

            $DataPrice=$data['element']->GetValue();
          
            if (is_object($DataPrice)) {
                if ($DataPrice->Val()==0){
                    $NotResult=True;
                }
            }
 

и

        if ($NotResult ) {
            return;
            }
        else
        {
            return implode(PHP_EOL, $output);
        }

Может это и неправильно  переписывать jbprice.php, но я уже задолбался разбираться. Это работает. 

Надо будет перепишу позже.



#18 Владимир Лозицкий

Владимир Лозицкий

Отправлено 24 May 2017 - 15:55   Лучший Ответ

Спасибо CB9TOIIIA

Я все таки разобрался и переписал правильно.

Если кому интересно код ниже.

if ($this->checkPosition('list')) {
    $juser=JFactory::getUser();
    $groups = $juser->get('groups');
    
            if (!in_array('10', $groups)) {/** если пользователь НЕ ВХОДИТ в группу ПРОФЕССИОНАЛЫ **/ 

                    /** ID переменной определяющей скрывать ли цену для непрофессионалов **/ 
                    switch ($item->type) {
                        case "cosmetic-lanza";
                            $CB_price = 'a0b1155b-8224-40f5-845b-ca81da5c2351';
                            break;
                        case "cosmetic-insight":
                            $CB_price = 'fca32c48-0ffc-478f-8549-d22b7f4a4d10';
                            break;
                        case "cosmetic-innovatis":
                            $CB_price = '4b486488-f08e-4cba-8897-f3971f5e2223';
                            break;                        
                    }           

                    $Quest = (array)$item->getElement($CB_price)->data()['option'];
                    $Key= $Quest[0];            
                    if ($Key=='net') { /** net - отсутствие ограничений на показ цены **/ 
                        echo '<div>';
                        echo $this->renderPosition('list');
                        echo '</div>';   
                        }
                else {
                    echo "<a class='need-get-price' href='/full-access'> Узнать цену </a>";
                }
            }     
    }

Самая главная моя ошибка была в том что $CB_price для каждого сайта своя. И ID  значение можно в полях JBZooApp (серая шестеренка)

 

В этом коде я определяю входит ли пользователь в определенную группу, и если не входит, то проверяю что установлено в поле показа цены цены только для одной группы. 


Это кстати был код одного из шаблонов вывода цены.



#19 CB9TOIIIA

CB9TOIIIA

Отправлено 24 May 2017 - 15:59

good :)


  • 0




Click to return to top of page in style!