0

我遇到的问题是制作一个新组件我似乎无法让 joomla 读取默认布局文件。这发生在组件的管理端和站点端。将它与我创建的另一个有效的组件进行比较,我看不出它的逻辑原因,因为两个组件都在同一环境中工作。

我知道,由于站点和管理员使用相同的方法,因此在一个中修复它应该在另一个中修复它。所以这是网站方面的事情。

首先是view.html.php

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');

// import Joomla view library
jimport('joomla.application.component.view');

class ComponentViewComponent extends JView{
    function display($tpl = null){
        parent::display($tpl);
    }
}


?>

然后是 tmpl/default.php

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');


// load tooltip behavior
JHtml::_('behavior.tooltip');


?>
hello

如您所见,它仍然是准系统,但是当我尝试在站点或管理员上访问它时,它会说“500:未找到布局默认值”。

我现在已经花了 n 个多小时试图找出可能导致这种情况的我出错的地方。

虽然我怀疑这里重要的是模型/控制器/构造函数

component.php(名称与实际组件不同)

<?php
//No direct access to this file
defined('_JEXEC') or die ('Restricted access');

// import joomla controller library
jimport('joomla.application.component.controller');

// Get an instance of the controller prefixed by GoTireReviews
$controller = JController::getInstance('Component');

// Perform the Request task
$input = JFactory::getApplication()->input;
$controller->execute($input->getCmd('task'));

// Redirect if set by the controller
$controller->redirect();

?>

模型/component.php

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');

// import Joomla modelitem library
jimport('joomla.application.component.modelitem');

class ComponentModelComponent extends JModelItem{

}


?>

控制器.php

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');

// import Joomla controller library
jimport('joomla.application.component.controller');

class ComponentController extends JController{

}


?>

我可能是盲目的并且遗漏了一些东西,但是到目前为止,我花了很多时间尝试进行细微的调整,似乎从头开始重新开始可能是一种不那么耗时的方法。

另请注意,该组件未命名为“组件”,但我使用它来使此示例更具可读性。

编辑:

找到原因了,是因为我在组件名称中使用了review这个词。这样做会欺骗 joomla 的视图方法并导致错误。(我为此目的更改了组件的名称,但没有想到它可能会导致这种情况)

4

1 回答 1

1

在 Joomla 2.5 中,它使用前缀命名其 MVC 实例,然后是方法,然后是名称。

像这样:

ComponentViewComponent 或 ComponentViewDefault

为此,它在类名的字符串中查找单词 view。因此,如果您这样命名它,您将导致错误:

ComponentReviewViewComponentReview

在这种情况下,您可能会觉得将其命名为 review 不会造成任何伤害,但它确实包含内部视图。Joomla 给出的错误通常也不会为您指明正确的方向。

于 2013-06-17T22:53:11.547 回答