Jump to content


Photo
- - - - -

id в поле itemname при подаче объявления


Best Answer .polega. , 05 January 2014 - 09:10

дошли руки до проверки

 

Да, все верно. Для этого в обработчике события нужно сделать проверку на тип материала и существование элемента в материале.

 

мне кажется, достаточно проверять существование элемента в материале, в другом типе материала этого элемента не будет по определению.

 

в итоге код получается таким:

$item = $event->getSubject(); // получаем объект сохраняемого материала

// чтобы не было бесконечного цикла (должно выполнятся всегда, иначе будут проблемы с импортом)
$item->getParams()->set('jbzoo.no_index', 1);

// для обычного поля text (а также проверка существования элемента)
if ($item->getElement('<ELEMENT_ID>')) {
    $item->getElement('<ELEMENT_ID>')->bindData(array(
    array('value' => $item->id)
));
 
// сохраняем изменения
self::app()->table->item->save($item);
}

где <ELEMENT_ID> - это идентификатор ВАШЕГО элемента

в моём случае это так:

        // для обычного поля text (а также проверка существования элемента)
        if ($item->getElement('9594d3bd-b58c-4adf-97c7-77dae1d7e27f')) {
          $item->getElement('9594d3bd-b58c-4adf-97c7-77dae1d7e27f')->bindData(array(
              array('value' => $item->id)
          ));

проверил, всё работает как надо.

думаю, тему можно закрывать.

Go to the full post


  • This topic is locked This topic is locked
4 replies to this topic

#1 gweb

gweb
  • JBZoo User (rus)
  • User rate: 0.2
  • posts: 36
  • topics: 8

Posted 11 December 2013 - 19:16

Доброго времени суток, подскажите пожалуйста каким образом скрыв от пользователей поле _itemname при подаче объявления можно сделать так чтобы в название попадал id этого материала? 

В этом сообщении предлагался вариант получения id, но он мне не подошёл, так как после этого подача начала заканчиваться сообщением об ошибке(может конечно я как-то криворуко вставил). 


  • 0

#2 Cheren-dow

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

Posted 14 December 2013 - 13:01

А как вы это ставили просто скопировали и все?

 

Если не знаете что делаете в ставляетй по одной строчке и проверяйте. Решение в том сообщении рабочее так так у человека все получилось. Так что велика вероятность что вы что то не правильно делаете.


  • 0
Изображение
 

#3 .polega.

.polega.
  • JBZoo User (rus)
  • User rate: 8.4
  • posts: 275
  • topics: 47

Posted 14 December 2013 - 16:51

решение действительно рабочее и у меня работает, но...

меня терзают смутные сомнения, но похоже в решении, которым я воспользовался, и которое предлагал использовать gweb есть недоработка.

Напомню ещё раз, что было предложено:

 

Это можно сделать в событии сохранения материала

\media\zoo\applications\jbuniversal\framework\events\jbevent.item.php saved()

В конец функции добавить примерно следующий код

    $item = $event->getSubject(); // получаем объект сохраняемого материала
     
    // для обычного поля text
    $item->getElement('<ELEMENT_ID>')->bindData(array( 
        array('value' => $item->id)
    ));
     
    // чтобы не было бесконечного цикла
    $item->getParams()->set('jbzoo.no_index', 1); 
     
    // сохраняем изменения
    self::app()->table->item->save($item);

Но теперь получается, что при любом событии сохранения и на любом (это важно) объекте будет выполняться этот код. А если у объекта нет этого поля с идентификатором <ELEMENT_ID>?

Будет ошибка. Например у меня есть элемент "объект недвижимости" и есть "риэлтор". С элементами "объекты недвижимости" всё работает как надо, а вот с "риэлторами" - проблема, возникает ошибка при сохранении.

Наверное и у gweb подобная ошибка при подаче. Либо неверно указан идентификатор, либо у объекта такого поля нет вообще.

Решение наверно должно быть таким, что бы учитывать, для какого объекта применять этот код, надо добавить условие проверки типа объекта.

Может гуру подскажут, как?


  • 0

#4 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 19 December 2013 - 17:37

при любом событии сохранения и на любом (это важно) объекте будет выполняться этот код.

Да, все верно. Для этого в обработчике события нужно сделать проверку на тип материала и существование элемента в материале.

Например так


// чтобы не было бесконечного цикла (должно выполнятся всегда, иначе будут проблемы с импортом)
$item->getParams()->set('jbzoo.no_index', 1); 

if ($item->getType()->id == 'type-alias' && item->getElement('<ELEMENT_ID>')) {
    $item->getElement('<ELEMENT_ID>')->bindData(array( 
        array('value' => $item->id)
    ));

    // сохраняем изменения
    self::app()->table->item->save($item);
}

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



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


#5 .polega.

.polega.
  • JBZoo User (rus)
  • User rate: 8.4
  • posts: 275
  • topics: 47

Posted 05 January 2014 - 09:10   Best Answer

дошли руки до проверки

 

Да, все верно. Для этого в обработчике события нужно сделать проверку на тип материала и существование элемента в материале.

 

мне кажется, достаточно проверять существование элемента в материале, в другом типе материала этого элемента не будет по определению.

 

в итоге код получается таким:

$item = $event->getSubject(); // получаем объект сохраняемого материала

// чтобы не было бесконечного цикла (должно выполнятся всегда, иначе будут проблемы с импортом)
$item->getParams()->set('jbzoo.no_index', 1);

// для обычного поля text (а также проверка существования элемента)
if ($item->getElement('<ELEMENT_ID>')) {
    $item->getElement('<ELEMENT_ID>')->bindData(array(
    array('value' => $item->id)
));
 
// сохраняем изменения
self::app()->table->item->save($item);
}

где <ELEMENT_ID> - это идентификатор ВАШЕГО элемента

screenshot_ 2014-01-05 10.09.08.jpg

в моём случае это так:

        // для обычного поля text (а также проверка существования элемента)
        if ($item->getElement('9594d3bd-b58c-4adf-97c7-77dae1d7e27f')) {
          $item->getElement('9594d3bd-b58c-4adf-97c7-77dae1d7e27f')->bindData(array(
              array('value' => $item->id)
          ));

проверил, всё работает как надо.

думаю, тему можно закрывать.


Edited by realtygroupinfo, 05 January 2014 - 09:12.

  • 0




Click to return to top of page in style!