当前位置: 首页 > 知识库问答 >
问题:

无法更改自定义Joomla 3组件中的布局

颜昕
2023-03-14

我试图让我的Joomla 3组件呈现在URL中指定的布局,但我不明白为什么它坚持显示test.php布局。下面的所有相关代码和我使用的网址是:

mysite.com/index.php?option=com_test

也许我完全错了,但我的代码如下:

代码:

joomla/组件/组件测试/测试。php:

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

jimport( 'joomla.session.session' );
JTable::addIncludePath(JPATH_COMPONENT.'/tables');
JLoader::registerPrefix('Test', JPATH_COMPONENT);
TestHelpersAssets::load();
$app = JFactory::getApplication();
$controller = $app->input->get('controller','default');
$classname = 'TestControllers'.ucwords($controller);
$controller = new $classname();
$controller->execute();

Joomla/组件/com_test/控制器/test.php:

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

class TestControllersTest extends JControllerBase
{
  public function execute()
  {

    $app = $this->getApplication();
    $document = JFactory::getDocument();

    $viewName = $app->input->getWord('view', 'test');       
    $viewFormat = $document->getType();     //html, raw etc.
    $layoutName = $app->input->getWord('layout', 'test2');

    $app->input->set('view', $viewName);

    // Register the layout paths for the view
    $paths = new SplPriorityQueue;
    $paths->insert(JPATH_COMPONENT . '/views/' . $viewName . '/tmpl', 'normal');

    $viewClass  = 'TestViews' . ucfirst($viewName) . ucfirst($viewFormat);
    $modelClass = 'TestModels' . ucfirst($viewName);

    $view = new $viewClass(new $modelClass, $paths);

    $view->setLayout($layoutName);

    echo $view->render();

    return true;
  }

}

joomla/组件/组件测试/模型/测试。php:

defined( '_JEXEC' ) or die( 'Restricted access' ); 

class TestModelsTest extends JModelBase
{

  function __construct()
  {
    parent::__construct(); 
  }

}

Joomla/组件/com_test/视图/测试/html.php:

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

class TestViewsTestHtml extends JViewHtml
{
  function render()
  {
    return parent::render();
  }
}

joomla/components/com_test/views/test/tmpl/test。php:

<h1>This is the test layout for the test view</h1>

joomla/components/com_test/views/test/tmpl/test2。php:

<h1>This is the test2 layout for the test view</h1>

共有2个答案

孔驰
2023-03-14

在新的mvc中,像model、view、controller这样的文件夹名应该是单数的(不像旧的mvc需要模型、视图和控制器)。同样,类名应该有单数段。

滑令
2023-03-14

Joomla似乎不喜欢布局名称中的数字...我把test2.phptesttwo.php,效果很好。

 类似资料:
  • 我有一个Vaadin自定义布局,我想在其中添加一个JavaScript组件——jQuery bxSlider。 在我的page1.html我有列表: 在我看来,我正在尝试执行JS: 但什么也没发生——图像并没有包装到滑块中。如何在Vaadin应用程序中运行此JS?

  • Mpx中的自定义组件完全基于小程序原生的自定义组件支持,与此同时,Mpx提供的数据响应和模板增强等一系列增强能力都能在自定义组件中使用。 原生自定义组件的规范详情查看这里 动态组件 Mpx中提供了使用方法类似于 Vue 的动态组件能力,这是一个基于 wx:if 实现的语法。通过对 is 属性进行动态绑定,可以实现在同一个挂载点切换多个组件,前提需要动态切换的组件已经在全局或者组件中完成注册。 使用

  • PyQt5有丰富的组件,但是肯定满足不了所有开发者的所有需求,PyQt5只提供了基本的组件,像按钮,文本,滑块等。如果你还需要其他的模块,应该尝试自己去自定义一些。 自定义组件使用绘画工具创建,有两个基本方式:根据已有的创建或改进;通过自己绘图创建。 Burning widget 这个组件我们会在Nero,K3B,或者其他CD/DVD烧录软件中见到。 #!/usr/bin/python3 # -*

  • 1. Component 创建自定义组件,接受一个 Object 类型的参数。 定义段 类型 是否必填 描述 最低版本 properties Object Map 否 组件的对外属性,是属性名到属性设置的映射表 data Object 否 组件的内部数据,和 properties 一同用于组件的模板渲染 observers Object 否 组件数据字段监听器,用于监听 properties 和

  • 1. 组件模板和样式 类似于页面,自定义组件拥有自己的 FXML 模板和 FTSS 样式。 1.1 组件模板 组件模板的写法与页面模板相同。组件模板与组件数据结合后生成的节点树,将被插入到组件的引用位置上。 在组件模板中可以提供一个 <slot> 节点,用于承载组件引用时提供的子节点。​ 代码示例 <!-- 组件模板 --> <view class="wrapper"> <view>这里是组件

  • 自定义组件 开发者可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中重复使用;也可以将复杂的页面拆分成多个低耦合的模块,有助于代码维护。自定义组件在使用时与基础组件非常相似。 创建自定义组件 一个自定义组件由 json jxml jxss js 4个文件组成。要编写一个自定义组件,首先需要在 json 文件中进行自定义组件声明(将 component 字段设为 true 可这一组文件设为自