Joomla フレームワーク コアの機能を拡張するカスタム ライブラリを作成しており、次のようにすべてのクラスをカスタム ライブラリ フォルダーに配置しています。
- libraries
- joomla
- my_custom_library
カスタム モジュール コードに使用できるように、モジュールのレンダリングが実行される前にすべてのクラスが存在することを望みます。現在、クラスをロードする場所として考えられる唯一の場所は、テンプレート ファイル内です。
<?php
// index.php in template folder
require_once(JPATH_LIBRARIES . DS . 'my_custom_library' . DS . 'Page.php';
require_once(JPATH_LIBRARIES . DS . 'my_custom_library' . DS . 'User.php';
// and so on...
// and then the HTML document follows with <jdoc:include type="modules" /> syntax
残念ながら、Joomla は私のテンプレート ドキュメントを解析し、すべての を読み取り、すべてjdoc:include
のモジュールの出力を保存してからrequire_once
、カスタム ライブラリのこれらの呼び出しを実行しているようです。常に false を返します。
<?php
// mod_something_custom.php in something_custom module folder
echo (bool) class_exists('MyCustomPageClass'); // false
何か (特にモジュール) がレンダリングされる前に、すべてのカスタム クラスをロードするにはどうすればよいですか? 可能であれば、コアを変更したくありません。
更新: を通じて含まれているモジュール<jdoc:include type="modules />
が、実際に自分のクラスが存在することを確認していることがわかりました。ただし、 の場合はこの限りではありません<jdoc:include type="component" />
。この場合、{loadposition}
宣言を使用してモジュールをロードしてレンダリングする com_content 記事があります。これを行うと、私のクラスは存在しなくなります。