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


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

Как автоматически сформировать имя материала при подаче с фронта и админки?


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

#1 alexmixaylov

alexmixaylov

Отправлено 15 January 2016 - 17:04

Нужно  автоматически сформировать имя материала из символа типа и айди материала
 
Редактирую метод в jbevent.item.php

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


        //формируем название квартиры из символа типа и ай ди материала
        $typeAlias = $item->type;
        $codeNum = str_pad($item->id, 5, "0", STR_PAD_LEFT);
        $item->name = mb_substr($typeAlias, 0, 1) . $codeNum;

......................................
}

При импорте прекрасно работает этот метод
 
Но как его заставить работать при создании материала из админки и при подаче материала с фронта?


Сообщение отредактировал alexmixaylov: 15 January 2016 - 17:04

  • 0

#2 Cheren-dow

Cheren-dow

Отправлено 15 January 2016 - 17:06

alexmixaylov, ни вижу в вашем методе пересохранения данных как описано в API.


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

#3 alexmixaylov

alexmixaylov

Отправлено 15 January 2016 - 21:14

alexmixaylov, ни вижу в вашем методе пересохранения данных как описано в API.

вижу там только один метод 

public static function saved()

 

пробовал добавить beforeSave и afterSave

безрезультатно


  • 0

#4 Cheren-dow

Cheren-dow

Отправлено 15 January 2016 - 21:34

alexmixaylov, в методе saved делайте пересохранение материала:

$app->table->item->save($item); 

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

#5 alexmixaylov

alexmixaylov

Отправлено 15 January 2016 - 21:55

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


        //формируем название квартиры из символа типа и последнего ай ди
        $typeAlias = $item->type;
        $codeNum = str_pad($item->id, 5, "0", STR_PAD_LEFT);
        $item->name = mb_substr($typeAlias, 0, 1) . $codeNum;

        $app->table->item->save($item);

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

        if (!$app->jbrequest->is('controller', 'jbimport')) {

            // update index data
            $app->jbtables->checkSku(true);
            $indexTableName = $app->jbtables->getIndexTable($itemType);

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

Делаю так

пытаюсь создавать новый материал из админки

страница с материалом зависает(и винт на локалке начинает усилено работать)

делаю закрываю материал - сохраняет ок

но как то не с такой нагрузкой оно должно работать


  • 0

#6 alexmixaylov

alexmixaylov

Отправлено 04 February 2016 - 23:32

        //формируем название квартиры из символа типа и id
        $typeAlias = $item->type;
        $codeNum = str_pad($item->id, 5, "0", STR_PAD_LEFT);
        $item->name = mb_substr($typeAlias, 0, 1) . $codeNum;
        $app->table->item->save($item);

Никак не могу побороть

зацикливается при сохранении

 

мне бы не во время сохранения материала это сделать, а после

но метод afterSave($event) к сожалению здесь не работает


  • 0

#7 Cheren-dow

Cheren-dow

Отправлено 05 February 2016 - 18:13

alexmixaylov, события afterSave в Zoo нет. Его можно добавить сделав хак в файле Zoo 

\administrator\components\com_zoo\controllers\item.php

метод save(). Добавьте событие как описано в документации.

 

Вы хотите добавить нули может быть проще использовать:
 

sprintf('%06d', $this->id);

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




Click to return to top of page in style!