Форум русской поддержки Joomla!® CMS
08.12.2016, 08:08:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

onContentAfterSave и JLanguageAssociations::getAssociations

 (Прочитано 104 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Cristoff
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« : 16.09.2016, 10:48:21 »

Разрабатываю плагин для articles тип "content".

Есть задача вытянуть актуальные языковые связи article с выбранными статьями/материалами.
Суть следующая
Код:
public function onContentAfterSave($context, $article, $isNew)
    {

        if ($context !== 'com_content.article')
            return true;
        if (empty($this->_db)) {
            $this->_db = JFactory::getDBO();
        }
        $associations = JLanguageAssociations::getAssociations('com_content', '#__content', 'com_content.item', $article->id);
}
Проблема в том что $associations имеет неактуальную информацию. Оно вринципе логично, судя по коду JModelAdmin Dispatcher срабатывает до сохранения ассоциаций.

Как можно обойти эту проблему без двойного сохранения?


Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #1 : 16.09.2016, 10:54:48 »

А вам религия не позволяет два раза сохранять?)
Записан
Cristoff
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #2 : 16.09.2016, 12:27:17 »

А вам религия не позволяет два раза сохранять?)
Типа того, но сохраняет пользователь. Заставлять его сохранять два раза - выглядит как костыль.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #3 : 16.09.2016, 12:38:45 »

Типа того, но сохраняет пользователь. Заставлять его сохранять два раза - выглядит как костыль.
ну тогда не совсем понятно что где и когда должен делать плагин ваш и на каком этапе должен получать языковые связи и для чего!
Записан
SmokerMan
Профи
********

Репутация: +694/-25
Offline Offline

Пол: Мужской
Сообщений: 5225



« Ответ #4 : 16.09.2016, 12:55:08 »

как вариант можно переопределить системным плагином модель и в ней уже делать что душе угодно)
Записан
Cristoff
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #5 : 16.09.2016, 12:56:11 »

ну тогда не совсем понятно что где и когда должен делать плагин ваш и на каком этапе должен получать языковые связи и для чего!

1. Есть статьи, которые создает юзер. Указывает раздел, язык и тд
2. Плагин цепляется на событие onContentAfterSave - то есть после сохранения статьи или создание новой.
3. Юзер использует встроенную возможность Joomla мультиязычность и создает еще статьи но с другим языком
4. В статье указывает связанные статьи и вот тут начинается проблема
5. Плагин в событии onContentAfterSave пытается получить эти связанные статьи, но их там нет потому что сохранение самих связей происходит после вызова события.

вот кусок кода /libraries/legacy/model/admin.php
Код:
$dispatcher->trigger($this->event_after_save, array($context, $table, $isNew));
}
catch (Exception $e)
{
$this->setError($e->getMessage());

return false;
}

if (isset($table->$key))
{
$this->setState($this->getName(). '.id', $table->$key);
}

$this->setState($this->getName(). '.new', $isNew);

if ($this->associationsContext && JLanguageAssociations::isEnabled() && !empty($data['associations']))
{
$associations = $data['associations'];

// Unset any invalid associations
$associations = Joomla\Utilities\ArrayHelper::toInteger($associations);


тут происходит вызов триггера и только потом обработка связей.

То есть и получается: чтобы мне получить актуальную инфу по связям нужно юзера заставить два раза жмакнуть кнопку сохранить.
Либо сделать это за него, но как понять когда перестать сохранять, чтобы не зациклиться.
 
Записан
Cristoff
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #6 : 16.09.2016, 12:56:32 »

как вариант можно переопределить системным плагином модель и в ней уже делать что душе угодно)

Можно поподробней.
Записан
SmokerMan
Профи
********

Репутация: +694/-25
Offline Offline

Пол: Мужской
Сообщений: 5225



« Ответ #7 : 16.09.2016, 13:10:20 »

Можно поподробней.
будет подключаться модель из плагина

* correct.zip (7.22 Кб - загружено 1 раз.)
Записан
Cristoff
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #8 : 16.09.2016, 13:22:28 »

будет подключаться модель из плагина
Спасибо. Интересный подход. Это распространенная практика в среде Joomla?
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #9 : 16.09.2016, 13:25:47 »

Спасибо. Интересный подход. Это распространенная практика в среде Joomla?
Это больше костыль чем практика )
можно попробовать в плагине самому сохранить связи (скопировав код administrator/components/com_content/models/article.php) со строки 545 начинается..
но я не знаю что больше костыль это или то (

Но я так и не понял зачем вам получать эти связи в момент сохранения, чего вы пытаетесь с ними потом сделать?
« Последнее редактирование: 16.09.2016, 13:31:55 от Istaan » Записан
SmokerMan
Профи
********

Репутация: +694/-25
Offline Offline

Пол: Мужской
Сообщений: 5225



« Ответ #10 : 16.09.2016, 13:33:54 »

Это больше костыль чем практика )
ну костыль не костыль не знаю, иногда другого выхода просто нет
бывают ситуации что не только модель ну допустим макеты надо переопределять, допустим в таблицу надо добавить вывод столбца или еще чего-то
по другому это не сделать
Записан
Cristoff
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #11 : 16.09.2016, 13:45:29 »

Это больше костыль чем практика )
можно попробовать в плагине самому сохранить связи (скопировав код administrator/components/com_content/models/article.php) со строки 545 начинается..
но я не знаю что больше костыль это или то (

Но я так и не понял зачем вам получать эти связи в момент сохранения, чего вы пытаетесь с ними потом сделать?

вся эта затея для автоматического создания меню по этим статьям. При включенном SEF режиме ссылки на новости выдают 404 если не сделать для него меню.
А меню так же имеет языковые связи.

чтобы сохранить эти связи мне их нужно получить, а в плагин они не попадают(
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet