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


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

Изменить уровень доступа для заказов

заказы доступ

Лучший Ответ SmetDenis , 24 April 2014 - 15:35

Сделал следующие изменения в файле jbevent.item.php

pam_200x0.png

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


  • Закрытая тема Тема закрыта
Сообщений в теме: 13

#1 firinmaxim

firinmaxim

Отправлено 18 April 2014 - 10:18

Доброго времени суток. Небольшая предыстория.

Мне необходимо реализовать проверку статуса заказа.

Решил сделать поиск по номеру заказа, он же ID.

ID перехватываю. как описано тут http://forum.jbzoo.c...?hl=поиск по id

Все норм сохраняется.

Сделал модуль JBZooSearch с поиском по ID но заказы не отображаются для Гостей.

Ссылка http://bike.keramaplaza.com/

Мне кажется это проблема в уровне доступа для элемента с типом "Заказ" (Картинка в приложении).

Внимание, вопрос!

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

Искал в настройках, результат отрицательный.

Буду признателен за помощь.

Прикрепленные изображения

  • 1.jpg

  • 0

#2 firinmaxim

firinmaxim

Отправлено 18 April 2014 - 10:32

Вопрос в тот же топик.

Как сделать, чтобы при создании нового заказа пользователем с front-end, по умолчанию ставилось значение "Для поиска" - "Да"?


  • 0

#3 SmetDenis

SmetDenis

Отправлено 19 April 2014 - 04:06

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

Это происходит тут media\zoo\applications\jbuniversal\framework\controllers\basket.php

 

7do_200x0.png

 

Там можно поставить "0"

 

Как сделать, чтобы при создании нового заказа пользователем с front-end, по умолчанию ставилось значение "Для поиска" - "Да"?

Там же указать searchable = 1


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#4 firinmaxim

firinmaxim

Отправлено 19 April 2014 - 12:03

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

Это происходит тут media\zoo\applications\jbuniversal\framework\controllers\basket.php

 

7do_200x0.png

 

Там можно поставить "0"

 

 

 

Там же указать searchable = 1

Да, помогло, только поставил

 $item->access           = 1;

С поиском тоже все отлично.

Один момент только остался...Не могу в синтаксисе разобраться.

В заказе есть элемент select - Состояние заказа. Нужно, чтоб при таком сохранении, по умолчанию значение выставлялось.

Настройку "По умолчанию" сделал в самом Типе "Заказ", но она не срабатывает при таком создании заказа.

Как правильно строчку написать?

Я добавил этот код туда же, перед   return $item;

 

        // для select (а также проверка существования элемента)
        if ($item->getElement('e49afd62-7370-4dc2-b37f-cd1e6480f908')) {
          $item->getElement('e49afd62-7370-4dc2-b37f-cd1e6480f908')->bindData(array(
              array('value' => 'na-rassmotrenii')
          ));
Увы, не помогло. Подскажите, пожалуйста, как правильно в селект значение записать.         

  • 0

#5 SmetDenis

SmetDenis

Отправлено 20 April 2014 - 07:30

Статус заказа по умолчанию указывается тут

media\zoo\applications\jbuniversal\elements\jbbasketitems\jbbasketitems.php

 

26h_200x0.png

 

Список возможных статусов формируется тут _getStatusList()

 

Чтобы добавить свой код в сохранение вам лучше изменить функцию bindData() перед "parent::bindData($saveData);"

 

Статус заказа находится в переменной $saveData['order_info']['status']


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#6 firinmaxim

firinmaxim

Отправлено 20 April 2014 - 08:41

Извините, некорректно выразил суть проблемы. Select "статус заказа" - это мой пользовательский, точнее называется "состояние".

И мне нужно при создание заказа с front-end пользователем с правами доступа "гость", присвоить этому пользовательскому полю типа select с ID e49afd62-7370-4dc2-b37f-cd1e6480f908 опцию name "в обработке" c value "na-rassmotrenii".

Т.е. как мы тут http://forum.jbzoo.c...?hl=поиск по id сохраняли ID в дополнительное пользовательское поле, мне также надо дополнительному пользовательскому select присвоить определенное значение.

Уверен, решается проблема одной строчкой кода, но никак не могу с синтаксисом совладать. Приходится Вас отвлекать, но очень помощь нужна. Вы уж не ругайтесь ;)

Прикрепленные изображения

  • 1.jpg

  • 0

#7 SmetDenis

SmetDenis

Отправлено 20 April 2014 - 17:58

Теперь кажется понял, попробуйте сделать так

 

    if ($item->getElement('<ELEMENT_ID>')) {
          $item->getElement('<ELEMENT_ID>')->bindData(array(
              array('option' => array('na-rassmotrenii'))
          ));
    }

Отличие в том что ключ называется option  а дополнительный массив, т.к элемент может быть множественным.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#8 firinmaxim

firinmaxim

Отправлено 20 April 2014 - 21:06

Теперь кажется понял, попробуйте сделать так

    if ($item->getElement('<ELEMENT_ID>')) {
          $item->getElement('<ELEMENT_ID>')->bindData(array(
              array('option' => array('na-rassmotrenii'))
          ));
    }

Отличие в том что ключ называется option  а дополнительный массив, т.к элемент может быть множественным.

 

К сожалению не помогло.

Вставлял код в оба файла, результат отрицательный. ID сохраняется в пользовательское поле типа text, а селект не хочет.

Может как-то нужно указать признак "выбранности" конкретной опции из селекта, что-то вроде "selected"=selected?

 

Листинг функции _createEmptyItem() файла /media/zoo/applications/jbuniversal/framework/controllers/basket.php

protected function _createEmptyItem($type, $application = null)
    {
        if (!$application) {
            $application = $this->application;
        }

        // get item
        $item                   = $this->app->object->create('Item');
        $item->application_id   = $application->id;
        $item->type             = $type->id;
        $item->publish_up       = $this->app->date->create()->toSQL();
        $item->publish_down     = $this->app->database->getNullDate();
        $item->access           = 1; // Joomla ViewLevel (Registered)
        $item->created          = $this->app->date->create()->toSQL();
        $item->created_by       = JFactory::getUser()->get('id');
        $item->created_by_alias = '';
        $item->state            = 0;
        $item->searchable       = 1;
        $item->getParams()
            ->set('config.enable_comments', 1)
            ->set('config.primary_category', 0)
            ->set('metadata.robots', 'noindex, nofollow');
        
        //Выставляем опцию состояние заказа
        if ($item->getElement('e49afd62-7370-4dc2-b37f-cd1e6480f908')) {
          $item->getElement('e49afd62-7370-4dc2-b37f-cd1e6480f908')->bindData(array(
              array('option' => array('na-rassmotrenii'))
          ));
        }
       // 

        return $item;
    }

Листинг функции saved() файла /media/zoo/applications/jbuniversal/framework/events/jbevent.item.php

public static function saved($event)
    {
        // vars
        $app      = self::app();
        $item     = $event->getSubject();
        $itemType = $item->getType()->id;

        // hack for JBZoo import optimization
        if ($item->getParams()->get('jbzoo.no_index', 0) == 1) {
            return null;
        }

        /////////////////   код для копирования ID в нужное поле  ///////////////////////////
        $item = $event->getSubject(); // получаем объект сохраняемого материала
         
        // чтобы не было бесконечного цикла (должно выполнятся всегда, иначе будут проблемы с импортом)
        $item->getParams()->set('jbzoo.no_index', 1); 
 
        // для обычного поля text (а также проверка существования элемента)
        if ($item->getElement('35802a2e-42e0-4db3-8bd3-79af933c9cfc')) {
          $item->getElement('35802a2e-42e0-4db3-8bd3-79af933c9cfc')->bindData(array(
              array('value' => $item->id)
          ));
         
          // сохраняем изменения
//          self::app()->table->item->save($item);
          }
        /////////////////   конец вставки для копирования ID в нужное поле  ///////////////////////////

        //Выставляем опцию состояние заказа
        if ($item->getElement('e49afd62-7370-4dc2-b37f-cd1e6480f908')) {
          $item->getElement('e49afd62-7370-4dc2-b37f-cd1e6480f908')->bindData(array(
              array('option' => array('na-rassmotrenii'))
          ));
                    self::app()->table->item->save($item);
        }
       // 


        // update index data
        $app->jbtables->checkSku(true);

        $indexTableName = $app->jbtables->getIndexTable($itemType);
        if ($app->jbtables->isTableExists($indexTableName, true)) {
            JBModelSearchindex::model()->updateByItem($item);
        }
        
        
    }

Подскажите, пожалуйста, где допустил ошибку?


  • 0

#9 SmetDenis

SmetDenis

Отправлено 23 April 2014 - 16:18

Работать должно.

 

Ваш сайт в интернете?

Можете дать мне временный ftp доступ? я попробую найти ошибку и исправить.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#10 firinmaxim

firinmaxim

Отправлено 23 April 2014 - 17:23

Да, в личку Вам отправляю данные.


  • 0





Темы с аналогичным тегами заказы, доступ

Click to return to top of page in style!