2017-01-20 6 views
0

私は、自動車のマイレージ情報を追跡するカスタム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'); 

} 

} 

これは、その後渡す必要がありますデータをモデルに挿入し、モデルを右の表に挿入します。データを受信して​​処理するための最良の方法でモデルを構築する方法は、もはや完全にはっきりしていません。単にデータベースクエリを使用してデータベースに追加することはできますか?または、複写機能に従ってコードを使用してジョブを完了する必要がありますか?

この特定のレコードのデータをコントローラに取得し、それをモデルに渡してデータベースに処理する方法はちょっとわかりません。

すべての

答えて

0

まず、あなたは最後paremeterはリストから要素を選択してみましょう

JToolBarHelper::custom('car.archive', 'archive.png', 'archive_f2.png', 'Archive Mileage', false); 

JToolBarHelper::custom('car.archive', 'archive.png', 'archive_f2.png', 'Archive Mileage', true); 

へ変更する必要がありますし、お使いのコントローラであなたからの要素のIDを取得することができるはず

$ids = $this->input->get('cid', array(), 'array'); 

編集

だけ入力からIDのparamを取得し、商品ページ内のボタンクリックからアイテムのIDを取得するには:

$this->input->get('id', null, 'int'); 

説明

同じようにすべてのツールバーボタンの仕事、それをクリックしますactomをjoomla形式の "action"フィールドに置き、投稿するので、アイテムページを表示すると、それはポストアクションからのものです。

+0

私はあなたの言うことを理解していますが、アイテムの編集フォームにあるので、リストから値を選択する必要はありません。だから私はレコードリストの概要について何もしていない、私はすでに選択をした。 – Badger

+0

ok、私の編集を参照してください;) – Yoleth

+0

私はこれを動作させることができません。私のコンソールでは、アプリケーションが選択したアイテムを期待していることがわかります。私はアイテムページにいるので、これは問題ではないはずで、現在のレコードを取る必要があります。アクション文で "false"を使用すると、エラーはスキップされますが、コントローラが指している場所にリダイレクトされ、レコードが選択されていないというエラーメッセージが表示されます。私は私の達成したことを知っているので、詳細を少し編集します。 – Badger

関連する問題