2

デフォルトの Joomla Protostar テンプレートを研究およびリバース エンジニアリングすることで、Joomla テンプレートの開発を学んでいます。私は何が起こっているのか約 80% を理解しており、PHP の基本を学ぶことでそれを再現することができました。ただし、次のコードのチャンクが何をしているのかわかりません (テンプレートの一番上にある defined('_JEXEC') または die; の直後にあります)。

// Getting params from template
$params = JFactory::getApplication()->getTemplate(true)->params;

$app = JFactory::getApplication();
$doc = JFactory::getDocument();
$this->language = $doc->language;
$this->direction = $doc->direction;

 // Detecting Active Variables
$option   = $app->input->getCmd('option', '');
$view     = $app->input->getCmd('view', '');
$layout   = $app->input->getCmd('layout', '');
$task     = $app->input->getCmd('task', '');
$itemid   = $app->input->getCmd('Itemid', '');
$sitename = $app->getCfg('sitename');

if($task == "edit" || $layout == "form" )
 {
$fullWidth = 1;
}
else
{
$fullWidth = 0;
}

私が得られないいくつかのことは...

  1. 「$ task」などのこれらの変数は、パラメーターとして設定されていることがわかりません。

  2. これらの変数が他の変数と同じように含まれていないのはなぜですか? $app->input とは何ですか?

4

1 に答える 1

3
$option   = $app->input->getCmd('option', '');
$view     = $app->input->getCmd('view', '');
$layout   = $app->input->getCmd('layout', '');
$task     = $app->input->getCmd('task', '');
$itemid   = $app->input->getCmd('Itemid', '');

これらの呼び出しは、さまざまなグローバル変数 $_POST、$_GET、$_SESSION などを調べて、それらの変数が定義されているかどうかを確認します ($_POST['task']、$_GET['task'] など)。存在しない場合は、デフォルト (2 番目の引数) を返します。

$app->inputjoomla の入力クラス (JRequest、JInput など) のオブジェクトです。そのクラスは、グローバル変数を調べるという実際の作業を行うクラスです。getCmdlikegetStringに変更することもできますが、getCmdそうでない他のフィルタリングを行う可能性がありますgetString。コア ファイル (request.php、input.php など) を調べて、実際の動作を確認する必要があります。

以下のように同じことができます。

$input = new JInput();
//get option or if none use the default 'com_users'
$option = $input->getString("option","com_users"); 

EDIT MVCに関するあなたの質問に関して:

いいえ、これは MVC の一部ではありません。これは、受信データをフィルタリングする簡単な方法を提供する単なる joomla です。

MVC は、アプリケーションのデータ (モデル)、ビュー、およびコントローラー部分の抽象化です。これはコンポーネントで確認できます。com_users コンポーネントまたは joomla に付属するその他のコンポーネントを見てください。

モデルはデータを操作し、ビューはデータ (およびそのビューに必要な正しい html,json) のみを出力し、コントロールはフローを制御するだけであることがわかります。

各パーツは、その領域を処理する作業のみを行う必要があります。たとえば、ビューのコードは、データベースの呼び出し、Web サービスからのデータの取得などを行うべきではありません。これはモデルの仕事です。ビューは、ビューが必要とする形式である必要があるモデルからデータのみを取得し、それを出力する必要があります。

これは、別の部分で別の部分の作業を行うことができないと言っているではなく、各部分が本来の作業を行うようにする/構築する必要があるということです。

于 2013-09-06T12:01:33.103 に答える