Форум Joomla! Україна

Повна версія: функція JTable reset() не працює
Ви переглядаєте спрощену версію. Переглянути повну версію з віповідним форматуванням.
стикнувся з такою проблемою. пишу компонент, хочу зберігати дані по правильному через таблицю, а не запитом "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() повинен не лише ідентифікатор обнуляти, але і решту значень
http://api.joomla.org/__filesource/fsour....html#a168

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

Тут хороша книжчека по програмування під 1.5
http://www.gruz.org.ua/images/stories/fi...zip.tar.gz

Сторінка 54/69 - глянь, там як раз про це. Може внесе ясність.
ну в книжці так і пише
Код:
$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" (як мабуть і у всіх), а воно вийожується... і в інших мануалах так пишуть робити я ж не зі стелі придумував цей метод, в любому випадку велике спасибі, що відізвався, ато в інших мороз кріпчає не по днях... зараз цей здоровий компонент по смс-маркетингу допишу може час з'явиться, покопаю глибше в корінь проблеми.