функція JTable reset() не працює

Створення, модифікація розширень для Joomla!
Правила форуму
Обов'язково вказуйте іконку версії Joomla для свого розширення. Це дозволить користувачам орієнтуватися для якої лінійки Joomla створено розширення та не задавати зайвих запитань!
fisk
Користувач
Користувач
Повідомлень: 139
З нами з: 06 серпня 2010, 09:13
Звідки: Файне місто Тернопіль

функція JTable reset() не працює

Повідомлення fisk » 21 червня 2011, 11:34

стикнувся з такою проблемою. пишу компонент, хочу зберігати дані по правильному через таблицю, а не запитом "INSERT TO", оскільки назви полів, що приходять через метод post відрізняються від наз полів в створеної таблиці JTable я не можу скористатись простим ->save() тому роблю так:

Код: Виділити все

public function savesend() {
      $user =& JFactory::getUser();
      $row =& $this->getTable();
      foreach ($items as $item) {
         $row->reset();
         $row->set('send_date', date("Y-m-d h:i:s"));
         $row->set('author', $user->id);
         if (!$row->store()) {
            $this->setError( $row->getErrorMsg() );
            return false;
         }
      }
зберігається лише останній доданий в базу запис, наскільки я розібрався тому, усі наступні записи в цьому циклі перезаписують попередній доданий запис через те, що $row->reset(); не обнуляє на дані по дефолту з файлу таблиці, тому на наступній інтерації циклу в $row поле ідентифікатора не пусте тому воно не додає ще один запис а оновлює попередній.

З.Ы. тимчасово вийшов з положення обнуляючи вручну параметр ідентифікатора в таблиці на початку інтерації

Код: Виділити все

$row->set('id', null);
, таким чином все працює чудово, але це ж не вірно бо reset() повинен не лише ідентифікатор обнуляти, але і решту значень

Аватар користувача
gruz
Користувач
Користувач
Повідомлень: 697
З нами з: 19 червня 2008, 18:09
Звідки: Прип'ять
Дякував (ла): 2 рази
Подякували: 26 рази

Re: функція JTable reset() не працює

Повідомлення gruz » 22 червня 2011, 15:58

http://api.joomla.org/__filesource/fsource_Joomla-Framework_Table_joomladatabasetable.php.html#a168

Як би радив туди залізти і подивитись jdump'ом механізм його роботи. Я не думаю, що це баг, скоріше нерозуміння як має працювати.

Тут хороша книжчека по програмування під 1.5
http://www.gruz.org.ua/images/stories/files/rizne/Joomla.Mastering.Joomla.1.5.Extension.and.Framework.Development.Nov.2007.zip.tar.gz

Сторінка 54/69 - глянь, там як раз про це. Може внесе ясність.
fisk
Користувач
Користувач
Повідомлень: 139
З нами з: 06 серпня 2010, 09:13
Звідки: Файне місто Тернопіль

Re: функція JTable reset() не працює

Повідомлення fisk » 22 червня 2011, 19:30

ну в книжці так і пише

Код: Виділити все

    $table->reset();
    $table->set('content', "Lorem ipsum dolor sit amet");
    $table->set('ordering', $table->getNextOrder());
    if ($table->check())
     {
         if (!$table->store())
         {
              // handle failed store
              // use $table->getError() for an explanation
         }
     }
    else
     {
         // handle failed check
         // use $table->getError() for an explanation
     }
The reset() method ensures that the table buffer is empty. The method returns all
of the properties to their default values specified by the class.


що очищає буфер та перезаписує значеннями по дефорлу, а в файлі JTable усі параметри ініціалізовані з "null" (як мабуть і у всіх), а воно вийожується... і в інших мануалах так пишуть робити я ж не зі стелі придумував цей метод, в любому випадку велике спасибі, що відізвався, ато в інших мороз кріпчає не по днях... зараз цей здоровий компонент по смс-маркетингу допишу може час з'явиться, покопаю глибше в корінь проблеми.


  • Similar Topics
    Відповіді
    Перегляди
    Останнє повідомлення

Повернутись до “Розробка та модифікація розширень”

Хто зараз онлайн

Зараз переглядають цей форум: 0 і 0 гостей