これが私がやろうとしていることです。ここでコピーする必要があるコードの部分がわからないので、簡単にするために、単純化した疑似コードから始めましょう。
モデル、テーブルなどがすべて機能するメインコンポーネント(com_main)があります。私のview.htmlから私は呼び出すことができます
$modelTU = $this->getModel('TimeUnits');
$modelTU->GetSchedule($date,...);
TUモデル
public function GetSchedule($date,...){
$query = self::getQuery();
$items = $this->_getList((string) $query...);
if (empty($items)){ //if non found, create new from template
$templateModel = $this->getModel('Templates');
$templateModel->createFromTemplate($date); //create TU's from a tempalte
}
return $items;
}
テンプレートモデル...パブリック関数createFromTemplate($ date、...){
//****THIS fails (or =FALSE) if called from module
//This works fine when called from the component!!
$modelTU = JModelLegacy::getInstance('TimeUnit', COM_MODEL_PREFIX); //THIS FAILS
$query = self::getQueryTempalte(....);
$items = $this->_getList((string) $query...);
foreach ($items as $item){
$valTimeUnit = array(
'duration' => $item->duration,
'price' => $item->price
...
);
$modelTU->save($valTimeUnit);
//I also tried store bind here
$tblTu = $modelTU->getTable();
$tblTu->bind(valTimeUnit); //table = False !!!
}
}
他にこれを説明する方法がわかりません。一番下の行:時間単位(TU)を読み込みます...そして、指定された日付が存在しない場合は、テンプレートモデルを呼び出して、TUに複製するテンプレート単位のセットを読み込みます。
これは、コンポーネント内から呼び出されると正常に動作します
モジュールを経由してモデルをimport require_once(JPATH_ROOT。 '/components/com_main/models/timeunit.php');等
動作します。存在する場合は、Timeunitをロードできます。
また、templateModelを呼び出して、私のマーカーまで新しいコピーを1回作成します。****最終的なTimeUnitモデル-> Save、または-> getTable();失敗する
しかし、モジュールから呼び出されたときのみ
私は何を間違っていますか/ルールに違反していますか?名前空間のインポートが最初の2つのモデルレベルをロードして機能し、最後の1つをロードできない方法がわかりません。 'JPATH_COMPONENT_SITE'を使用してコンポーネント内のファイルを要求できない場合は、モジュールから機能させる場合は 'JPATH_ROOTを使用します。 「/ components/com_byteitbooking /」。
私がダニが見逃しているものはありますか?
ありがとう
編集:JModelAdminを拡張するタイムユニットモデルで、このテストを行った追加コード
public function getTable($type = self::THIS_CLASS_NAME, $prefix = COM_TABLE_PREFIX, $config = array()) {
dumpMessage("-> admin.MODEL.TimeUnit.getTable()");
dumpMessage("-> $type,$prefix");
dump($config,'$config');
$tb = JTable::getInstance($type, $prefix, $config);
dump($tb,'$tb');
return $tb;
//return JTable::getInstance($type, $prefix, $config);
}
コンポーネントから最初に呼び出された結果、モジュールから2番目の結果...変数は正しく解決されます
VS
モデル/テーブルを使用するためにモジュールにコピーする必要がありますか? Joomlaには何らかの制限がありますか?
モデルとテーブルの両方のパスを含める必要があると思います。
JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_main/models', 'ByteitBookingModel');
$modelTU = JModelLegacy::getInstance('TimeUnit', 'ByteitBookingModel');
$modelTU->addTablePath(JPATH_ADMINISTRATOR . '/components/com_main/tables');