Joomla 3.xでは、JLayoutクラスを使用して、ROOT/layoutsフォルダーにあるファイルをオーバーライドできます
このドキュメントによると http://docs.joomla.org/J3.x:JLayout_Improvements_for_Joomla !
必要なのは、このようなものを追加することだけです。
$layout = new JLayoutFile('joomla.edit.frontediting_modules');
$layout->addIncludePaths(YJSGPATH .'includes/html/layouts');
print_r($layout);
このスニペットは、onAfterRoute関数のシステムプラグインに追加されます。
これで、配列は正常に見え、正しい方向を指しています
JLayoutFile Object
(
[layoutId:protected] => joomla.edit.frontediting_modules
[basePath:protected] =>
[fullPath:protected] =>
[includePaths:protected] => Array
(
[0] => D:\wamp\www\Development\Yjsgv2-DEV\3x\plugins\system\yjsg\includes/html/layouts
[1] => D:\wamp\www\Development\Yjsgv2-DEV\3x/templates/creatus/html/layouts
[2] => D:\wamp\www\Development\Yjsgv2-DEV\3x/layouts
)
[options:protected] => Joomla\Registry\Registry Object
(
[data:protected] => stdClass Object
(
[component] =>
[client] => 0
)
)
[debugMessages:protected] => Array
(
)
)
そしてファイルfrontediting_modules.phpは私のフォルダにあります http://prntscr.com/4lijlf
しかし、オーバーライドは行われていません。
bootstrap popover and tooltips http://prntscr.com/4lijz の呼び出しを削除しましたが、テストするだけで機能しません
オーバーライドフォルダーをテンプレートのhtmlフォルダーに移動すると、オーバーライドが機能します。
誰か教えてください。
ありがとうございました!
addIncludePaths
呼び出しは、_$layout
_変数の特定のインスタンスにのみ影響します。プラグインでレイアウトもレンダリングしない限り、コードは実際のレンダリングに影響を与えません。
ドキュメントレンダラーからこの行に影響を与えようとしているようです:
_JLayoutHelper::render('joomla.edit.frontediting_modules', $displayData);
_
これは、JLayoutHelperのrenderメソッドを使用して、JLayoutFile
の新しいインスタンスをインスタンス化します。
_public static function render($layoutFile, $displayData = null, $basePath = '', $options = null)
{
$basePath = empty($basePath) ? self::$defaultBasePath : $basePath;
// Make sure we send null to JLayoutFile if no path set
$basePath = empty($basePath) ? null : $basePath;
$layout = new JLayoutFile($layoutFile, $basePath, $options);
$renderedLayout = $layout->render($displayData);
return $renderedLayout;
}
_
実行しようとしていることを行うには、_$layout
_設定とこのメソッド内のレンダーコールの間に行($layout->addIncludePaths(YJSGPATH .'includes/html/layouts');
)を挿入する必要があります。
それにはコアコードの編集が含まれるため、おそらくそれを避けたいでしょう。ただし、CMSで実行しようとしていることを実行する方法はまだありません(まだ!)。
これはCMSの非常に新しい部分であるため、将来的にはオプションになる可能性がありますが、まだありません。
OK、JLayoutFileクラスを拡張し、レイアウトとtemplate/html/layoutの間にパスを追加するために管理したいくつかのクラスをすでに拡張しているので、回避策を見つけました
このメソッド経由 コアクラスをオーバーライドする方法?
だから配列は今読む
JLayoutFile Object
(
[layoutId:protected] => joomla.edit.frontediting_modules
[basePath:protected] =>
[fullPath:protected] =>
[includePaths:protected] => Array
(
[0] => D:\wamp\www\Development\Yjsgv2-DEV\3x/templates/creatus/html/layouts
[1] => D:\wamp\www\Development\Yjsgv2-DEV\3x\plugins\system\yjsg\includes/html/layouts
[2] => D:\wamp\www\Development\Yjsgv2-DEV\3x/layouts
)
[options:protected] => Joomla\Registry\Registry Object
(
[data:protected] => stdClass Object
(
[component] =>
[client] => 0
)
)
[debugMessages:protected] => Array
(
)
)
そしてチェック
できればいいのに
jimport('cms.layout.file');
JLayoutFile::addIncludePath(YJSGPATH .'includes/html/layouts');
addIncludePathメソッドがすでに存在するため、将来的には。
ちょうどこれにつまずいた。一番上の答えは正しくなく、提供されている回避策は必要ありません。彼らはずっと前に投稿されたので、情報はおそらく当時はあまり知られていないでしょう。
JLayoutがオーバーライド可能であることが主な目的であるため、1日目(Joomla 3.0.0)からそうでした。
オーバーライドするために必要なことはすべてjoomla.edit.frontediting_modules
は、元のレイアウトファイルをテンプレートの上書きフォルダーに追加することです。その例では、次のようにコピーします。
/layouts/joomla/edit/frontediting_modules.php
に
/templates/{your_templates}/html/layouts/joomla/edit/frontediting_modules.php
他のタイプのオーバーライドについては、通常どおり変更を加えます。
これが 対応するJoomlaドキュメントページ です(「テンプレートのオーバーライド」の段落をご覧ください。
RGDS