Если Ваш компонент работает с достаточно большим количеством записей, выводимых пользователю в админке, которые он сам же и добавляет, то кнопка "дублировать" на панели инструментов будет весьма полезна.
Добавляем кнопку "дублировать" (clone) в компонент
Итак начнем с модели. Нам необходимо в нее добавить функцию:
public function createClone() { $table = $this->getTable();//Получаем доступ к таблице $cids = JRequest::getVar('cid', array(0), 'post', 'array');//массив выбраных чекбоксов foreach ($cids as $cid) { $table->load($cid);//загружаем все данные конкретного id $table->load($table->id); $table->set('id', 0);//обнуляем id, чтобы при записи создавался новый if ($table->name != null)//проверка на выделенность чекбоксов (name - какой-либо столбец таблицы кроме id) { if (!$table->store())//запись { $this->setError($table->getError());//ошибка, если запись не получилась return false; } } else { $this->setError($table->getError()); return false; } } return true; }
Собственно, это самое главное)
Изменения в контроллере
В контроллер надо добавить следующую функцию:
public function Cloneit() { $model = $this->getModel('fieldlist');//получаем доступ к модели if ($model->createClone())//если функция из модели сработала... { $message = JText::_('MY_COMPONENT_DOUBLE_SUCCESS');//пишем все ок) } else { $message = JText::_('MY_COMPONENT_DOUBLE_CAN_NOT');//Если нет - пишем, что все плохо и выводим ошибку $message .= '['.$model->getError().']'; } $this->setRedirect('index.php?option=com_component, $message);//перенаправляемся на нужную страничку и получаем сообщение }
Ну и, собственно, создаем нашу кнопку "дублировать" в представлении или шаблоне:
JToolBarHelper::custom('Cloneit', 'copy.png', 'copy.png', 'MY_COMPONENT_FIELDS_DUPLICATE', false, false);
Тут, думаю все понятно)
Так создается кнопка "дублировать". Не сложно, зато полезно)
|