web-dev-qa-db-ja.com

コンポーネントから現在のテンプレートのヘッドを取得します

コンポーネントからドキュメントの<head>を取得してrawビュー内で使用することは可能ですか?

format=rawを使用する場合、コンポーネントが返すものだけをドキュメントに出力することができます(つまり、他のモジュールやテンプレートなどはありません)。

テンプレートのビット(特に<head>)を含むコンポーネントのビューを作成し、コンポーネントが生成するものだけを作成しようとしています(これをCLIユーティリティwkhtmltopdfに渡す予定です) PDF)を生成します。

私のコンポーネントはスタイル設定のためにテンプレートCSSに依存しているのでheadが必要ですが、他には何も必要ありません-基本的に:

<html>
<head>
...css, js, title, etc from template...
</head>
<body>
...ONLY output from my component, like 'format=raw'...
</body>
</html>
1
codinghands

これは、期待どおりに実行する方法です。

view.raw.phpは次のようになります。

<?php
defined( '_JEXEC' ) or die;

class YOURCOMPONENTViewYOURVIEW extends JViewLegacy // or JView depends on J! version
{
    public function display($tpl = 'raw')
    {
        parent::display($tpl);
    }
}

default_raw.phptmplフォルダー内のファイルは次のようになります。

<?php
defined( '_JEXEC' ) or die;
$url = jUri::base();

$ch = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION, TRUE);
$contents = curl_exec($ch);
curl_close($ch);

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($contents);
libxml_use_internal_errors(false);

$xpath = new DOMXPath($dom);
$head = $xpath->query('/html/head')->item(0);
$head = $dom->saveHTML($head);
echo '<html>' . $head . '<body>BLAH BLAH</body></html>'
2
Farahmand

Afaik、JDocumentRawには<head>はありません。未加工の形式は、テンプレートをまったく読み込まずに、HTML以外の出力を生成することを目的としています。

テンプレートデザインを使用してコンポーネント出力をHTMLページとしてのみ生成する場合は、URLに&tmpl=componentを追加する必要があります。これにより、component.phpではなくindex.phpファイルがテンプレートに読み込まれます。モジュールの位置を読み込まず、コンポーネントのみを出力します。これは、モーダルウィンドウなどで特に役立ちます。

2
Bakual