2012-02-17 7 views
0

私はhttp://docs.joomla.org/Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.7_-_Part_06でコンポーネント開発のチュートリアルを終えました。Joomlaの開発 - テーブルのフォルダとフィールドのフォルダ

コードは素晴らしいですが、説明を省略したような気がします。私の主な質問は、各フォルダにどのようなものを含めるべきか、いつ使用するべきかということです。

私が混乱していることは、フィールドコードを削除できることです。フロントエンドはまだそこにないように動作します。だから何をやっているの?

第2 - テーブルファイルのコードは、コンストラクタを親クラスに呼び出すようです。どのようにこれは私が探している情報を得ることができますか? getTable()を呼び出すときにJTableが初期化されているからですか?

この例では、データベースから1つのレコードが必要な場合のみ表示されています...私はそれらをすべて一覧にしたい場合はどうすれば同じテーブルファイルを使用するのですか?

申し訳ありません - 私はちょうどこれの周りに私の頭を包んでしようとしています。私の最大の問題は、私はしばしば彼らのドキュメントから私の頭を傷つけて残っている...任意のアドバイス/説明ありがとう!

ダレンは

+0

OK:

https://docs.joomla.org/J1.5:Using_the_JTable_class

とここではそれのすべての説明はここで確認することができますテーブルからレコード?意味 - あなたがそのIDを知っていたら?また、あなたのテーブルのフォルダに複数のファイルがあることはありますか?おそらく、コンポーネントに複数のテーブルがあるとしたら? – dingerkingh

+0

解決策ではありませんが、joomlaのモデリング方法を学ぶ上で多大な助けとなったことがあります(この分野のドキュメントはあまり役に立ちませんが、v.1.5のコンポーネントチュートリアルはdbのやりとりがない「こんにちはの世界」ページでした)他の拡張子を見ることでした。いくつか(あなたがやりたいことに最も近い、おそらく)ダウンロードして、彼らがどのように動作するかを見てください。最後に、理論的でスリムで静的なページを読むよりも、このようにもっと学びます。 –

+0

素晴らしいアイデア。提案していただきありがとうございます。 – dingerkingh

答えて

1

私は、ドキュメントは少し混乱することができていることに同意するものとします。 Damien Pirsy氏が示唆したように、他の拡張機能を見ると、本当に役に立ちます。しかし私の経験では、他の拡張機能はJoomlaの標準(例えばコミュニティビルダ)に固執しないでフリースタイルになりがちです。私の提案は、com_contactsやcom_weblinksなどの組み込みのコンポーネントを見ることです。

フィールドコードを削除しても、実際にフロントエンドが破損することはありません。これは、(最低でも少なくとも6つの)フィールドはバックエンド(管理者)でのみ使用されるためです。

「この変更の結果は、helloworldアイテムのメニューマネージャセクションで確認できます。」というフィールドコードの説明の直下にある行があります。

フィールドコードを削除すると、メニュー項目の編集が中断されることがわかります。

getTable()が呼び出されると、Tableクラスの新しいインスタンスが作成されます。親クラス(JTable)がロード/保存などを処理するため、テーブルコードが非常に短くなる可能性があります。JTableは、テーブル名とプライマリキーの名前(id)のみを知る必要があります。あなたは、テーブルのコンストラクタの呼び出し中でこのデータを渡す:あなたは、データベースから項目のリストをロードしたい場合は

parent::__construct('#__helloworld', 'id', $db); 

、JTableのは、一般的に使用されていません。代わりにJModelListを参照してください。 Weblinks use of ModelListを参照してください。

はい、複数のテーブルがある場合は、テーブルフォルダ内の複数のファイルが便利です。

0

Fieldsフォルダには、実際には管理者側で必要なカスタムフィールドのコードが含まれています。管理者側でフォームを作成すると、そのフォームにいくつかの希望の結果を示すフィールドが存在する可能性があります。

たとえば、フォームには、選択可能なリストの下にあるすべてのJoomlaユーザーを表示するフィールドが必要です。この場合は、あなたがタイプ=「anyUniqueName」のXMLフィールドを作ることができ、obviuoslyこのXMLは、「モデルの

<field name="j_users" type="anyUniqueName" label="JOOMLA_USERS" /> 

さて、名前anyUniqueName.phpを持つファイルをもとに構築されるの「フォーム」ディレクトリの下になります'models'の 'fields'ディレクトリ。

class JFormFieldAnyUniqueName extends JFormFieldList{ 
    protected function getInput() { 
     $this->multiple=true; 
     return parent::getInput(); 
    } 
    protected function getOptions() { 
     $options = array(); 
     $this->multiple=true; 

     $db = JFactory::getDBO(); 
     $query = $db->getQuery(true); 
     $query->SELECT('id, user_name') 
      ->FROM($db->quoteName('#__virtuemart_users')) 
      ->ORDER('id'); 
     $db->setQuery($query); 
     $values = $db->loadObjectList(); 
     foreach ($values as $v) { 
      $options[] = JHtml::_('select.option', $v->id, vmText::_($v->user_name)); 
     } 

     // Merge any additional options in the XML definition. 
     $options = array_merge(parent::getOptions(), $options); 
     return $options; 
    } 
} 

テーブルフォルダは、JTableにアクセスしてコンテンツの読み取り、作成、操作を行うために作成されます。テーブルがより多くのものに使用されて表示されます...ので、私はいくつかのより多くの掘りました -

https://docs.joomla.org/Using_the_JTable_class

関連する問題