2

Joomla コンポーネントを開発していますが、コンポーネントで実行するタスクがたくさんあります。私が現在行っているのは、単一のビューとそれに対応するコントローラーを持つことです。ユーザーが何らかのタスクを要求した場合、コントローラーで対応するメソッドを呼び出すだけです。このメソッド自体で、ユーザーに表示されるすべての HTML コードを記述しました。すべてが正常に機能しています。

私の唯一の疑問は、私はまだ MVC モデルに従っているか、私のコンポーネントは Joomla コミュニティに受け入れられるかということです。

これが適切な方法でない場合は、単一のコントローラーからさまざまなタスクにさまざまなビューを設定する方法を教えてください。ビューは、views>name>tmpl>default.php および view>name>tmpl>sample.php にあります。

4

2 に答える 2

1

最初はこれに答えるつもりはありませんでしたが、「Joomlaコミュニティに受け入れられた」と私は2ビットを投入するように説得されました。

IMHO、典型的なJoomlaユーザーは、MVC、PHP、さらには開発の専門家ではないので、私の最初の関心事は、それを彼らに「受け入れられる」ようにすることです。私は、Joomla Contentコンポーネントのような一般的に受け入れられているコンポーネントと、ユーザーがそれをどのように操作するかをモデルにして、コンポーネントの開発をモデル化しようとしています。記事に新しいメニュー項目を追加するときは、選択肢がどのように編成されているかに注意してください-アーカイブ、シングル、カテゴリ、注目など。これはユーザーが理解できる編成なので、それに応じてMVCを編成します

おそらく技術的に完璧な答えではないかもしれませんが、結局のところ、Joomla CMSは通常、技術者以外のユーザー向けであるため、私は通常、最初に彼らの観点から見て、技術的に健全であるようにします。

于 2012-06-24T16:59:50.270 に答える
1

これには複数の部分からなる回答が必要なようです。

  1. JED の「コミュニティ」には、コンテンツの送信に役立ついくつかの優れたドキュメントがあります。これらには、利用規約拡張機能ディレクトリの FAQ 、および2010 年後半に開始された「強化された承認プロセス」に関するブログ エントリが含まれます。

  2. おそらく「コミュニティ」に関する限り、同じコントローラーから異なるビューを処理する「正しい」方法は、エンドユーザー/デザイナーが Joomla! のオーバーライドを使用できるようにすることです。そのため、ディレクトリ内の各ファイルはtmplHTML のみを<?php echo $this->myVariable; ?>含むようにし、可能な場合は複数のファイルを含める必要があります。表示用のデータの配列を解明するためのループが時折発生します。コントローラーが HTML を生成するべきではありません。そうすると、エンド ユーザー/デザイナーはコンポーネントのテンプレート オーバーライドを作成できなくなります。

  3. 標準のJoomlaで見ると!2.5 コンポーネントでは、コントローラーとサブコントローラーの配置がビューと一致する傾向がありcom_contentます。articlesarticlefeatured

  4. そうは言っても、ユーザーが実行してtmplいる同じview依存関係に対して異なるものを使用することは許容され、サポートされています。taskこれはcontroller.task、呼び出し URL の形式を使用して実現されます。たとえば、コンポーネントの 1 つが同じビューを表示しますが、ユーザーのアクセス許可に基づいて、edittmpl またはruntmpl ファイルを参照している可能性があります。これを実現するコードは非常に単純です。

例えば

if($canDo->get('core.edit')) {
    $plan = '<a href="'.JRoute::_( 'index.php?option=com_easystaging&task=plan.edit&id='. $row->id ).'">'.$row->name.'</a>';
} elseif ($canDo->get('easystaging.run')) {
    $plan = '<a href="'.JRoute::_( 'index.php?option=com_easystaging&task=plan.run&id='. $row->id ).'">'.$row->name.'</a>';
} else {
    $plan = $row->name;
}
于 2012-06-25T00:47:49.670 に答える