web-dev-qa-db-fra.com

Obtenir la tête du modèle actuel du composant

Est-il possible de récupérer le <head> d'un document à partir d'un composant puis l'utiliser dans une vue raw?

Je sais si vous utilisez format=raw vous pouvez faire en sorte que le document ne produise que ce que le composant renvoie (c'est-à-dire sans aucun autre module, élément de modèle, etc.)

J'essaie de créer une vue pour mon composant qui inclut un peu du modèle (en particulier le <head>) et ensuite uniquement ce que mon composant génère (je prévois de le transmettre à un utilitaire CLI wkhtmltopdf pour générer un PDF de la sortie).

J'ai besoin de head car mon composant s'appuie sur un modèle CSS pour le style, mais je ne veux rien d'autre - en gros:

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

C'est une façon de l'exécuter comme vous le souhaitez:

Le view.raw.php serait quelque chose comme ça:

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

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

Le default_raw.php fichier dans le dossier tmpl ressemblerait à ceci:

<?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, il n'y a pas de <head> dans JDocumentRaw. Le format brut est conçu pour générer une sortie non HTML, sans charger le modèle.

Si vous souhaitez générer uniquement la sortie du composant sous forme de page HTML à l'aide de la conception de modèle, vous devez ajouter &tmpl=component à l'URL. Cela va charger le component.php fichier dans votre modèle au lieu du index.php. Il ne devrait charger aucune position de module et ne générer que le composant. Ceci est particulièrement utile pour les fenêtres modales et autres.

2
Bakual