0 Пользователей и 1 Гость просматривают эту тему.
  • 30 Ответов
  • 703 Просмотров
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Хочу реализовать следующее в своем компоненте:

Журнал операций - чтоб иметь четкую картину кто когда и чего делал.
Например: есть таблица №1 и все виды для работы с ней.
при создании элемента в Т1 надо чтоб запрос как текст попал в Т(log)
Структура для Т(log) создана

Подскажите куда копать? Или отговорите...
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

AlekVolsk

  • Профи
  • 6312
  • 336
самое простое: переопределить все методы создания/сохранения/публикации/удаления/прочих_действий элементов в модели и перед вызовом родителя делать запись в лог через JLog либо организовать собственный лог (запись в отдельную таблицу компонента, просмотр и управление - только в админке и только суперюзером)
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Блин по переопределению чет сражу не понимаю. Подкиньте ссылочку на изучение, кто богат.
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

robert

  • Профи
  • 4082
  • 378
Спойлер
[свернуть]
Функция test() в классе Test2 переопределена.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
А список названий какой у функций
save? или как?
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
И еще вопрос. А как достать переменные данной записи внутри метода?
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
По переопределению save получилось
Спойлер
[свернуть]
Подскажите какие еще есть функции полезные для работы и как они называются по англ и входные выходные данные. (можно ссылку)
Полезные например: после сохранения есть что-то, а то в момент сохранения может не быть id. Может еще какие заморочки есть?
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

robert

  • Профи
  • 4082
  • 378
По переопределению save получилось
Спойлер
[свернуть]
Что получилось? По приведенному коду не вижу.
Полезные например: после сохранения есть что-то, а то в момент сохранения может не быть id. Может еще какие заморочки есть?
Переведите.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Что получилось? По приведенному коду не вижу.Переведите.
Получилось то что достал данные $data и могу их пользовать. По поводу переведите: не могу достать id элемента который только что создается.
Для добавления нового элемента как лучше достать данные?
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

robert

  • Профи
  • 4082
  • 378
не могу достать id элемента который только что создается.
В переопределенном методе save() сразу после успешной
Код: php-brief
$table->store()
делайте
Код: php-brief
$id=$table->id;
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
... сразу после успешной
вот эт оне понимаю. Что это значит?
И попутно вопрос как мне положить переформированные данные в другую таблицу?
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

robert

  • Профи
  • 4082
  • 378
не могу достать id элемента который только что создается.
Посмотрел JModelAdmin::save(), можно сделать проще: в переопределенном методе save() после успешного сохранения
Код: php-brief
$id=$this->getState($this->getName().'.id');
На этом бесплатные ответы закончились.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
На этом бесплатные ответы закончились.
Спасибо и на этом. Дали бы ссылки на то как писать в другой table и все прочее - я готов разбираться, можно без прямых подсказок. Тем не менее спасибо!
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

robert

  • Профи
  • 4082
  • 378
Спасибо и на этом. Дали бы ссылки на то как писать в другой table и все прочее - я готов разбираться, можно без прямых подсказок. Тем не менее спасибо!
Не знаю такой ссылки - сам учусь, разбирая код.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

dmitry_stas

  • Профи
  • 10059
  • 955
Не знаю такой ссылки - сам учусь, разбирая код.
platonische, это на самом деле так. нет ничего лучше в изучении чего то, чем изучение работы его исходников. имхо вы без этого не продвинетесь дальше, сколько бы умных книжек вы не прочли.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Подскажите в каком стандартном компоненте есть запись в две таблице?
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

b2z

  • Support Team
  • 7470
  • 743
  • Разраблю понемногу
А в чём проблема с записью в две таблицы?

Код: php
public function save($data)
{
    if (!parent::save($data))
    {
       return false;
    }

    $id = $this->getState($this->getName(). '.id');
    $this->updateSecondTable($id, $data);
}

private function updateSecondTable($id, $data)
{
     // здесь пишите во вторую таблицу
}
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Честно признаться. Я действительно немного знаю и достаточно тяжеловато.
Затык заключается не в ток как передать переменные другой функции, а в том куда передать?

Ведь все же есть готовое и можно наверное во вторую таблицу методом save записать данные или надо городить что-то вот такое?:
Спойлер
[свернуть]

Читаю код родительского метода из файла libraries\legacy\model\admin.php буду разбираться как его заставить table сменить... пока решение в лоб - скопировать его и присвоить нужное значение $table
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Что выходит:
в моделе добавил getLogTable
Спойлер
[свернуть]

метод save вот такой:
Спойлер
[свернуть]

И вторая функция сохранения вот ту прошу помочь. Все работает но не все понимаю
Спойлер
[свернуть]
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Ещё вопрос: А куда можно вынести функцию function updateSecondTable($data) чтоб пользоваться ей из всех моделей, что есть в компоненте?
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Возник вопрос.

Сохранение во вторую таблицу работает отлично.

второе сохранение срабатывает после первого сохранения и вываливает в адресную строку id не элемента а id из второго сохранения (id таблицы log) как побороть?
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Ответ на пред пост
Спойлер
[свернуть]
Из второго сохранения надо убрать эту строку.
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
А зачем Вам проверка  if ($this->associationsContext && JLanguageAssociations::isEnabled())?
Я не знаю - взял родительский метод под копирку.
Подскажите какие операции здесь лишние? cleanCache нужен ли и все что в catch ?
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Продолжаю задавать вопросы.
1. Подскажите куда засунуть функцию чтоб был к ней доступ из каждой модели?
2. Подскажите как переопределить publish и delete функции? Точнее как внутри них запустить функцию save? Суть в том что мне надо при изменении статуса published делать запись во второй таблице и соответственно вызывать методы сохранения новой записи... не выходит у меня это.
Ну и еще переопределить их где лучше? в модели или контроллере?
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
1. Подскажите куда засунуть функцию чтоб был к ней доступ из каждой модели?
Никуда не засовывать, любой метод в любой модели можно дергать из другой модели!
Код: php
$model = JModelLegacy::getInstance( $name = 'List', $prefix = 'TestModel' ); //то есть имя класса модели TestModelList
echo $model->getTest();// вызываем метод getTest() в модели!

2. Подскажите как переопределить publish и delete функции? Точнее как внутри них запустить функцию save? Суть в том что мне надо при изменении статуса published делать запись во второй таблице и соответственно вызывать методы сохранения новой записи... не выходит у меня это.
Ну и еще переопределить их где лучше? в модели или контроллере?
2. переопределить просто
Код: php
public function publish( &$pks, $value = 1 ){
if ( parent::publish( $pks, $value ) ) {
//тут ваш код
}
}
Только зачем вам вызывать внутри них метод save для изменения данных?
Получаете нужную таблицу через
$table = $this->getTable('table_name'); //вместо table_name имя вашей таблицы
$table->load(10); // загружаете запись с id=10
$table->text = 'lalala'; //меняете значение в поле text на lalal
$table->save(); // сохраняете данные!
« Последнее редактирование: 14.03.2016, 21:11:11 от Istaan »
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Никуда не засовывать, любой метод в любой модели можно дергать из другой модели!
2. переопределить просто
Код: php
public function publish( &$pks, $value = 1 ){
if ( parent::publish( $pks, $value ) ) {
//тут ваш код
}
}
Только зачем вам вызывать внутри них метод save для изменения данных?
Получаете нужную таблицу через
$table = $this->getTable('table_name'); //вместо table_name имя вашей таблицы
$table->load(10); // загружаете запись с id=10
$table->text = 'lalala'; //меняете значение в поле text на lalal
$table->save(); // сохраняете данные!
По первому вопросу спасибо испробую!
По второму немного поясню: Вот сменили значение published а в таблице Log надо СОЗДАТЬ запись, тут вопрос еще один всплывает, когда берешь внутри модели somethingS то это класс JModelList а метод сохранения у меня лежит в методе SOMETHING а он расширяет класс JModelAdmin и чего-то у меня не катит функция вызванная из другого метода
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
По первому вопросу спасибо испробую!
Я там выше код дополнил как модель дергать!

По второму немного поясню: Вот сменили значение published а в таблице Log надо СОЗДАТЬ запись
а вы пробовали хоть немножко документацию читать?!
Повторю код:
Код: php
$table = $this->getTable('table_name'); //вместо table_name имя вашей таблицы
$table->load(10); // загружаете запись с id=10
$table->text = 'lalala'; //меняете значение в поле text на lalal
$table->save(); // сохраняете данные!
Вот так вы отредактируете старую запись!

Код: php
$table = $this->getTable('table_name'); //вместо table_name имя вашей таблицы
$table->text = 'lalala'; //меняете значение в поле text на lalal
$table->save(); // сохраняете данные!
Вот так вы создадите новую запись!

Вам не нужно вызывать метод SAVE ибо он без контроллера, без переданных данных в $_POST, токена и установки состояний работать не будет!
И в конечном результате метод save делает сохранение в таблицу с помощью класса JTable!


тут вопрос еще один всплывает, когда берешь внутри модели somethingS то это класс JModelList а метод сохранения у меня лежит в методе SOMETHING а он расширяет класс JModelAdmin и чего-то у меня не катит функция вызванная из другого метода
Потому что вы 99.999% неправильно вызываете модель!
Если вызываете не так:
Код: php
$model = JModelLegacy::getInstance( $name = 'List', $prefix = 'TestModel' ); //то есть имя класса модели TestModelList
echo $model->getTest();// вызываем метод getTest() в модели!
а просто проинклудив, то неудивительно что у вас не работает!
Но и работать не будет! Вам надо сделать как я написал выше! через $table (класс JTable)
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

platonische

  • Давно я тут
  • 320
  • 0
  • Парусные экспедиции vk.com/tc670
Понял! Шагаем дальше. Спасибо!
Парусные экспедиции http://vk.com/tc670, сплавы на байдарках http://vk.com/magnittv_turism
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Изменения id для отображения названия в компоненте Joomla

Автор ice77

Ответов: 63
Просмотров: 1169
Последний ответ 19.08.2017, 23:39:37
от ice77
Использование поля tag для кастомных тегов в компоненте

Автор Inoken

Ответов: 4
Просмотров: 177
Последний ответ 15.08.2017, 23:12:50
от fsv
[Решено] AJAX пагинация - подгрузка контента (в своём компоненте) Joomla 3.x

Автор ninth

Ответов: 15
Просмотров: 7021
Последний ответ 16.04.2017, 07:26:10
от ghostcom
Обработка AJAX в компоненте Joomla!3

Автор balancer

Ответов: 32
Просмотров: 2357
Последний ответ 08.02.2017, 10:09:38
от b2z
Ошибка в компоненте при передаче параметров в форму для редактирования на стороне сайта

Автор GuDeVic

Ответов: 66
Просмотров: 890
Последний ответ 23.11.2016, 22:53:48
от GuDeVic