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


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

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


Лучший Ответ .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)
          ));

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

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

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


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

#1 gweb

gweb

Отправлено 11 December 2013 - 19:16

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

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


  • 0

#2 Cheren-dow

Cheren-dow

Отправлено 14 December 2013 - 13:01

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

 

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


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

#3 .polega.

.polega.

Отправлено 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

Отправлено 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.

Отправлено 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> - это идентификатор ВАШЕГО элемента

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)
          ));

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

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


Сообщение отредактировал realtygroupinfo: 05 January 2014 - 09:12

  • 0




Click to return to top of page in style!