it-swarm.dev

Ottieni la testa del modello corrente dal componente

È possibile recuperare il <head> di un documento da un componente e utilizzarlo in una vista raw?

So che usi format=raw puoi avere il documento in uscita solo ciò che il componente restituisce (cioè senza altri moduli, elementi del modello, ecc.)

Sto provando a creare una vista per il mio componente che include un po 'del modello (in particolare il <head>) e solo ciò che genera il mio componente (intendo passare questo a un'utilità CLI wkhtmltopdf per generare un PDF dell'output).

Ho bisogno di head poiché il mio componente si basa sul template CSS per lo styling, ma non voglio nient'altro - in sostanza:

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

Questo è un modo per eseguirlo come previsto:

Il view.raw.php Sarebbe qualcosa del genere:

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

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

Il file default_raw.php Nella cartella tmpl sarebbe simile al seguente:

<?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

Sì, non c'è <head> in JDocumentRaw. Il formato non elaborato ha lo scopo di generare output non HTML, senza caricare affatto il modello.

Se desideri generare l'output del componente solo come pagina HTML utilizzando la progettazione del modello, devi aggiungere &tmpl=component all'URL. Questo caricherà il component.php file nel modello anziché index.php. Non dovrebbe caricare alcuna posizione del modulo e solo emettere il componente. Ciò è particolarmente utile per finestre modali e simili.

2
Bakual