我在自己的组件中查看(前端)(view.html.php):
class MevViewMev extends JView{
function display($tpl = null){
parent::display($tpl);
}
}
模板:
<?php defined('_JEXEC') or die('Restricted access'); ?>
<div>
ASFADSFDSF
</div>
如何在没有joomla模板(头部,样式等)的情况下显示它。我想在窗口中调用jquery onclick方法的这一部分。
答案 0 :(得分:21)
要显示组件,只需将“tmpl = component”参数添加到url。 如果需要显示组件视图之外的东西,可以自定义 - 在模板的根文件夹中创建“component.php”文件,并在其中包含您需要的任何内容。 可以用相同的方式完成更多模板 - 在模板的根文件夹中创建“some_template.php”并将“tmpl = some_template”参数添加到url。
答案 1 :(得分:4)
开始编辑
好的,以下工作,但我找到了更好的方法。在你的控制器中做...
if (JRequest::getVar('format') != 'raw') {
$url = JURI::current() . '?' . $_SERVER['QUERY_STRING'] . '&format=raw';
header('Location: ' . $url);
// or, if you want Content-type of text/html just use ...
// redirect($url);
}
结束编辑
你可以按照Babur Usenakunov的建议将'tmpl'设置为'component',在这种情况下可以加载脚本和css,比如......
JRequest::setVar('tmpl','component');
但是,如果要创建原始输出,可以添加&amp; format = raw或在组件中创建“原始”类型的视图......
不幸的是,我能找到正确渲染viewType的唯一函数方法是在视图类调用parent :: display()之后调用exit()...
在你的controller.php中......
class com_whateverController() extends JController
{
function __construct()
{
// the following is not required if you call exit() in your view class (see below) ...
JRequest::setVar('format','raw');
JFactory::$document = null;
JFactory::getDocument();
// or
//JFactory::$document = JDocument::getInstance('raw');
parent::__construct();
}
function display()
{
$view = $this->getView('whatever', 'raw');
$view->display();
}
}
然后在views / whatever / view.raw.php ...
中class com_whateverViewWhatever extends JView
{
public function display($tpl = null)
{
parent::display();
exit; // <- if you dont have this then the output is captured in and output buffer and then lost in the rendering
}
}
答案 2 :(得分:0)
我知道这很晚了,但是对于未来的读者来说,这是我为扩展程序执行的操作,而无需编辑模板或在URL中添加任何内容(因为我无法控制这两者):
jimport('joomla.application.component.view');
use \Joomla\CMS\Factory;
// Comp stands for the Component's name and NoTmpl stands for the View's name.
class CompViewNoTmpl extends \Joomla\CMS\MVC\View\HtmlView {
// Force this view to be component-only
public function __construct() {
$app = Factory::getApplication();
$app->input->set('tmpl', 'component');
parent::__construct();
}