私は、自動車のマイレージ情報を追跡するカスタムJoomla MVCコンポーネントを作成しました。これの重要な部分は、古いマイレージ情報を車ごとにアーカイブし、ログインしたユーザーにこれを表示できることです。私がしようとしているのは、マイレージが更新されているときに、古いマイレージ情報をデータベースの別のテーブルに「アーカイブ」することです。今では、デフォルトのsave()関数をオーバーライドする方法を正確にはわかりませんが、レコードをテーブルに書き込むカスタムツールバー関数を使いたいと考えていました。簡潔でシンプル。これは私がこれまでにやったことです:Joomla MVCコンポーネント - 単一レコードのカスタム保存機能
私は管理者/コンポーネント/ com_cars /ビュー/車/ view.html.phpに新しいボタンを
JToolBarHelper::custom('car.archive', 'archive.png', 'archive_f2.png', 'Archive Mileage', false);
を私のツールバーを追加しましたそれから私は、機能のアーカイブを追加しました"administrator/components/com_cars/controllers/car"へ
単純なエコー文を追加すると、ボタンが機能していることを確認できます。しかし、次に必要なのは、「アーカイブマイレージ」ボタンがクリックされたときに、アクティブなレコード(リストから開いたレコード)の情報が新しいテーブルに書き込まれるということです。だから、基本的に私は選択されたレコードを複製していますが、それを別のテーブルに保存しています。別のテーブルにデータを置くために使用されているので、私は、そのためのプログラミングを変更する必要がありますこれは、「車」(ない車)のための私のコントローラファイルが今探している方法です:。
class CarsControllerCar extends JControllerForm
{
/**
* Constructor
*
* @throws Exception
*/
public function __construct()
{
$this->view_list = 'cars';
parent::__construct();
}
public function archive()
{
// Get the input
$input = JFactory::getApplication()->input;
$ids = $this->input->get('cid', array(), 'array');
try
{
if (empty($ids))
{
throw new Exception(JText::_('COM_CARS_NO_ELEMENT_SELECTED'));
}
ArrayHelper::toInteger($ids);
$model = $this->getModel();
$model->archive($ids);
$this->setMessage(Jtext::_('COM_CARS_ITEMS_SUCCESS_DUPLICATED'));
}
catch (Exception $e)
{
JFactory::getApplication()->enqueueMessage($e->getMessage(), 'warning');
}
$this->setRedirect('index.php?option=com_cars&view=cars');
}
}
これは、その後渡す必要がありますデータをモデルに挿入し、モデルを右の表に挿入します。データを受信して処理するための最良の方法でモデルを構築する方法は、もはや完全にはっきりしていません。単にデータベースクエリを使用してデータベースに追加することはできますか?または、複写機能に従ってコードを使用してジョブを完了する必要がありますか?
この特定のレコードのデータをコントローラに取得し、それをモデルに渡してデータベースに処理する方法はちょっとわかりません。
すべての
私はあなたの言うことを理解していますが、アイテムの編集フォームにあるので、リストから値を選択する必要はありません。だから私はレコードリストの概要について何もしていない、私はすでに選択をした。 – Badger
ok、私の編集を参照してください;) – Yoleth
私はこれを動作させることができません。私のコンソールでは、アプリケーションが選択したアイテムを期待していることがわかります。私はアイテムページにいるので、これは問題ではないはずで、現在のレコードを取る必要があります。アクション文で "false"を使用すると、エラーはスキップされますが、コントローラが指している場所にリダイレクトされ、レコードが選択されていないというエラーメッセージが表示されます。私は私の達成したことを知っているので、詳細を少し編集します。 – Badger