如何在使用 Component Creator 构建的 Joomla 3.x 组件的一个视图中包含多个模型

2024-01-01

Joomla 组件使用 MVC 模型。 Component Creator 是一种广泛使用的工具,其付费级别支持通过 SQL 导入创建多表视图。此外,开发人员根据 Joomla 文档从头开始构建组件。

我想构建一个高级组件,充当“仪表板”,显示来自多个数据库表的数据,并具有 Joomla 的所有管理员后端和访问者前端 CRUD(创建、读取、更新、删除)功能。这意味着我需要从屏幕上显示的多个数据库表中绘制多个模型(来自 MVC 哲学)同时地.

Joomla 文档 https://docs.joomla.org/Using_multiple_models_in_an_MVC_component建议将以下代码插入到“控制器任务方法”中以使信息可用:

$view = $this->getView( 'model-a', 'html' );
$view->setModel( $this->getModel( 'model-a' ), true );
$view->setModel( $this->getModel( 'model-b' ) );
$view->display();

然后稍后使用视图中的显示方法调用这些模型:

$item1 = $this->get( 'data1' );
$item2 = $this->get( 'data2', 'model-b' );

但是,Joomla 文档中提供的这些说明不充分或与遵循提供的 Joomla 时构建的组件不兼容你好世界教程 https://docs.joomla.org/J3.x:Developing_an_MVC_Component/Developing_a_Basic_Component教程或使用广泛使用且流行的 Component Creator 工具构建的组件。组件在调用时将无法加载页面,或者不会通过简单的复制将数据传递到视图,并将其粘贴到组件创建者或 Joomla hello world 教程创建的多个控制器中的任何一个中。

如何在 Joomla 3.X 组件的同一视图中调用多个模型?


通过直接在两个视图中进行调用,我能够成功地从同一视图使用多个模型view文件到正确形成的模型。我没有遵循 Joomla 文档,因为我没有修改任何可能的内容控制器(一个是整个组件的控制器,另一个是特定于视图的控制器)。我也没有使用 Joomla 文档中提供的函数,因为这些函数会产生错误。

根据正确的 Joomla MVC 约定,视图是由相关视图目录和子文件夹中的两个文件创建的:

  • /网站/浏览量/多视图名称/view.html.php(将模型传递给视图)
  • /网站/浏览量/多视图名称/tmpl/default.php(其中包含 HTML 模板)

需要更改这两项才能同时查看多个模型的数据。假设所有其他视图、控制器和模型都已正确构建,这将有效,就像使用“组件创建器”工具时自动完成的那样。我的组件有数百个文件,包括 CSS、后端管理、安装、语言等。所有这些都是使用组件创建工具瞬间构建的。

经过删节但仍然功能完整的代码如下:

/网站/浏览量/多视图名称/view.html.php

<?php

jimport('joomla.application.component.view');

class ComponentnameViewMultiviewname extends JViewLegacy
{
//  $items is for the default model
    protected $items;
//  $ItemsOtherModel is for second model. Notice the '$' used here but not elsewhere   
    protected $ItemsOtherModel;

    public function display($tpl = null)
    {
        $app = JFactory::getApplication();
        $this->state = $this->get('State');
        $this->items = $this->get('Items');
        $this->pagination = $this->get('Pagination');
        $this->params     = $app->getParams('com_componentname');

//  sets default model
        $this->setModel( $this->getModel( 'model-a' ), true );
//  sets second model & uses 'JModelLegacy,' contrary to documentation
        $this->setModel(JModelLegacy::getInstance('model-b', 'componentnameModel'));
//  assigns array from the second model to 'ItemsOtherModel.' there is no '$' sign used.
        $this->ItemsOtherModel = $this->get('Items','model-b');

        parent::display($tpl);
    }

}

/网站/浏览量/多视图名称/tmpl/default.php

<?php

echo "<h3>Items from default model</h3> ";
echo var_dump($this->items);

echo "<h3>items from secondary model</h3> ";
//  notice that the '$' is absent from 'ItemsOtherModel'
echo var_dump($this->ItemsOtherModel);

这一突破只有经过数天的研究才有可能实现。付费的组件创建器 http://www.component-creator.com该工具对于我开始编写符合 Joomla MVC 组件标准的格式良好的代码非常有用。经过几天的处理和检查所有文件后,我找到了我需要的提示这个谷歌群组主题 https://groups.google.com/forum/#!topic/joomla-dev-general/9jYXvVJD3ks,让我注意JModelLegacy类,在 google 搜索 PHP 错误消息中的术语时发现的PHP Notice: Undefined index:尝试使用官方记录的方法时留在我的服务器上。

在浏览器中呈现的页面只是将数据库表中的所有信息转储到页面,但进一步的开发可以创建我最终需要的格式化且功能齐全的仪表板。

此代码用于显示信息列表,而不是多个单个项目。用于将多个模型添加到一个视图的 Joomla 文档是针对多个单个项目(而不是此处显示的项目数组)设置的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在使用 Component Creator 构建的 Joomla 3.x 组件的一个视图中包含多个模型 的相关文章

  • regex php - 查找 div 中具有特定 ID 的内容

    我确信这是一个简单的问题 尽管我在谷歌上进行了如此多的搜索和搜索 但我似乎无法弄清楚这有什么问题 我在此页面上的其他区域使用类似的表达式来准确返回我想要的内容 但是 我无法让这个特定的位返回我想要的东西 所以也许有人可以帮助我 我有一个带有
  • 限制 WooCommerce 上的域名注册

    如何限制用户电子邮件对 WooCommerce 注册中特定域的访问 我发现这段代码可以做到这一点 但由于某种原因它在 WooCommerce 注册表单上不起作用 如果我进入 WP 登录页面 它就会起作用 任何帮助表示赞赏 function
  • PHP中如何替换字符串?

    我有一个变量 其中包含如下所示的字符串 p The post a href http zed1 com journalized archives 2012 03 11 wordpress 3 for business bloggers Wo
  • 图片无法直接上传到相册

    我正在开发上传图片文件的应用程序 但图片不能直接上传到相册 上传之前始终必须经过批准 如何解决这个问题 问题 您想将这些照片添加到您的相册吗 下面的照片是从另一个应用程序上传的 您需要批准它们 你需要user photos允许直接上传到相册
  • PHP:如何访问根目录之外的下载文件夹? [复制]

    这个问题在这里已经有答案了 我如何创建一个 PHP 脚本 页面 允许会员 买家下载存储在根目录之外的下载文件夹中的压缩文件 产品 我正在使用 Apache 服务器 请帮忙 谢谢 保罗 G 您可能会在 soac 提供的链接中找到一些更好的信息
  • php简单xml如何读取具有不同子节点级别的多个节点

    我有一个 xml 文件 其中包含不同的命名节点和多级子节点 每个节点之间都不同 我应该如何访问数据 需要很多嵌套的for循环吗 以下是 xml 代码示例
  • CodeIgniter Active Record - 组 OR 语句

    这是我的问题 MySQL 或 条件 https stackoverflow com questions 8604380 mysql or condition 解决方案是将 OR 语句分组 但我正在使用 CodeIgniters Active
  • 通过日期选择器过滤查询后检索具有特定值的行数[重复]

    这个问题在这里已经有答案了 目前 我正在使用 CodeIgniter 来检索特定时间范围内的数据 所有这些条目都有一个状态 我想将具有相同状态的所有条目分组并将其显示在各自的标题中 目前 这是我的模型类 其中我有以下条目来返回特定日期范围内
  • 使用 with 的热切加载模型,但给它起了另一个名字 - Laravel 5.2

    是否可以使用 with 方法来使用预加载 但给它另一个名称 就像是 gt with documents as product documents documents as categories 我有一个可以是产品或类别的文档表 急切加载可以
  • 将 PHP 变量保存到文本文件

    我想知道如何将 PHP 变量保存到 txt 文件 然后 再次检索它们 Example 有一个输入框 提交后写的东西 输入框将被保存到文本文件中 稍后需要结果 作为变量带回 假设变量是 text I 需要将其保存到文本文件并能够将其检索回来
  • 如何在 phpfarm php 安装上安装 pthreads

    记录我为帮助他人所做的努力 并希望得到一些关于我如何做得更好的反馈 命令pecl install pthreads由于我的 php 安装失败ubuntu 13 04盒子没有配置 zts Options 1 ubuntu存储库没有启用zts的
  • 如何使用来自数据库的值来定义 Twig 模板的全局变量?

    我想为 twig 定义一个全局变量 可以从任何模板访问它 我可以在 symfony 中创建一个全局变量config packages twig yaml 但我需要它是从数据库获取的值 在 twig 的文档中 它说使用此代码 twig new
  • 使用 shell_exec Powershell 输出到 PHP 变量

    我有一个 powershell 脚本 它输出视频文件持续时间 运行这个脚本给了我预期的结果 Folder C my path to folder File sample1 1280 720 mp4 LengthColumn 27 objSh
  • 如何从对应的数组值中获取数组键?

    您可以轻松地通过其键获取数组值 如下所示 value array key 但如果我有该值并且想要它的密钥怎么办 获得它的最佳方式是什么 你可以使用array search https www php net manual en functi
  • Symfony 4.1 组件 - 依赖注入问题

    我正在用 PHP 重构旧应用程序 我正在尝试使用 Symfony 依赖注入组件将服务注入控制器 或其他服务 但我不知道如何实现这一点 因为 symphony 文档比框架组件更适合使用框架 我已经有了自己的内核 包含所有服务和控制器的容器 控
  • 按时间戳字段中的日期过滤结果

    我已经获得了一些帮助 但不确定为什么这不起作用 我正在尝试使用表单让用户过滤他们的活动 存储在数据库中 My code GET from 01 11 2013 GET to 25 11 2013 from DateTime createFr
  • mysqli_connect(): (HY000/2002): 无法建立连接,因为目标机器主动拒绝

    我知道有很多这样的问题 但我没有找到任何解决方案 我尝试过的事情 检查防火墙 重新启动我的电脑和 Apache 服务器 重新启动MYSQL 检查了我的代码 尝试了我所知道的和在互联网上找到的一切 这是我的代码
  • 如何在 Api-Platform 中按链接属性过滤结果?

    我有一个User实体和一个Organisation实体 存在关系ManyToOne之间Booking and User ORM ManyToOne targetEntity App Entity User inversedBy bookin
  • Curl 和 Php 5.3.3 中的 SSL 连接错误

    我的网站自 3 年来一直运行良好 代码如下 现在突然从 2 天开始出现以下错误 SSL 连接错误 在 Curl error 中 下面是我的代码
  • 通过“SELECT”命令选择每组的前两条记录的最佳方法是什么?

    例如我有下表 id group data 1 1 aaa 2 1 aaa 3 2 aaa 4 2 aaa 5 2 aaa 6 3 aaa 7 3 aaa 8 3 aaa 通过 SELECT 命令选择每组的前两条记录的最佳方法是什么 如果没有

随机推荐

  • 我可以通过编程方式控制 .NET Core 程序集重定向吗?

    问题 NET Core 2 0 netstandard 2 0 中是否有任何方法可以应用给定中未定义的程序集重定向application exe config运行可执行文件时的文件 也许某种编程方式 或者甚至通过使用一些特殊设置 标志运行可
  • 你可以同时运行 Coldfusion 和 PHP [重复]

    这个问题在这里已经有答案了 可能的重复 是否可以在同一服务器和网站上运行 Coldfusion 和 PHP https stackoverflow com questions 2444598 is is possible to run co
  • iOS 上的 Firebase Crashlytics 设置?

    我正在尝试集成 Firebase崩溃解决方案进入 iOS 我的应用程序 该应用程序启用了 Firebase 崩溃报告 我已按照文档进行操作here https firebase google com docs crashlytics upg
  • 老问题,如何确定不规则形状中的点?

    我学习 Html5 Canvas 有几个星期了 但是上面的问题困扰了我很长时间 不规则的形状 可能是圆形 矩形 椭圆形 多边形 或者由一些直线和贝塞尔曲线构造的路径 我找到了一些针对某些形状的算法 例如圆形 矩形和多边形 但是 如果我在画布
  • 带有打字稿的 nextjs API,将 NextApiRequest 查询参数限制为字符串类型[重复]

    这个问题在这里已经有答案了 在这个端点处理程序中 有没有办法限制req query在 NextJS 中NextApiRequest只是string类型而不是string string 例如 someQueryParam这里是string s
  • 内核模块如何卸载自身而不在内核日志中生成错误?

    我制作了一个简单的模块 可以在加载时打印 GDT 和 IDT 当它完成工作后 就不再需要它并且可以卸载 但如果它返回负数以停止加载 insmod会抱怨 并且错误消息将记录在内核日志中 内核模块如何优雅地卸载自身 据我所知 使用库存内核是不可
  • 如何设计系统以允许加密迁移?

    我想建立一个系统 允许我将加密密码 哈希密码 从一个系统迁移到另一个系统 我该怎么做 比如说 2 个月后 我发现了一种加密方法 其性能提高了 10 倍 并且当前的哈希函数已被毫无疑问地证明是完全脆弱的 我将如何将用户密码从一种哈希类型迁移到
  • 如何注释 EJS 代码(JS 节点)而不出现错误

    我在 EJS 文件中有以下代码 table tr td td td td tr table 当我这样评论的时候
  • 获取数字的 CastError NaN

    我收到这个错误 CastError Cast to Number failed for value NaN at path area message Cast to Number failed for value NaN at path a
  • 带有 CSS 的纹理文本?

    我目前正在开发一个简单的页面 有谁知道有什么方法可以将纹理图像覆盖在文本上吗 目前的规格似乎不可能 但请告诉我这是否可能 谢谢并保重 不知道为什么没有人回答这个问题 这可以使用background clip https codepen io
  • 指定 Tkinter 文本框的尺寸(以像素为单位)

    如何使用像素指定 Tkinter 文本框的尺寸 我不想改变字体大小 我用它来帮助我将其缩放到窗口的大小 您可以通过将其放入框架内 通过停用尺寸传播并配置条目以粘贴到框架边框来强制框架为固定尺寸来实现此目的 pack 也应该以类似的方式工作
  • 屏幕上和变量中的调用表达式输出

    我正在尝试存储来自的输出Invoke expression到变量以及屏幕上 我有 PS 日志记录 它会自动将所有内容记录为Write Host在一个文件中 现在我正在使用Invoke Expression这似乎要么在屏幕上打印输出 要么打印
  • 对 pandas MultiIndex 数据帧进行重新采样

    我有一个类似于以下内容的 pandas MultiIndex 数据框 import pandas as pd rows One One One 20120105 1 Text1 One One One 20120107 2 Text2 On
  • swift ios 键盘扩展 - 长按/按住

    我需要知道如何向 ios 自定义键盘扩展添加长按 按住 功能 以便我可以显示多个键以从中选择一个 expected design 我的项目结构 按键操作的当前代码 代码可以将按下的按钮的标题作为新文本添加到任何代理文本字段中 IBActio
  • Xcode PhoneGap 本地化

    这两天我一直在努力尝试向我的应用程序添加特定于语言的本地化 该应用程序正在使用 PhoneGap 1 1 我正在尝试使用 XCode 4 1 构建它 两天以来我一直在寻找信息 教程 其他内容 但找不到任何详细信息 所以 要么这是一个微不足道
  • XStream解析没有根节点的JSON

    我目前正在使用 XStream 反序列化 JSON 并且效果很好 但是 当我有如下所示的 JSON 字符串时 key1 an object something foobar key2 another object data hi 最值得注意
  • 在哪里放置模型数据和行为? [tl;博士;使用服务]

    我正在使用 AngularJS 来完成我的最新项目 在文档和教程中 所有模型数据都放入控制器范围内 我知道它必须可供控制器使用 因此必须在相应的视图中 但我认为该模型实际上不应该在那里实施 例如 它可能很复杂并且具有私有属性 此外 人们可能
  • 将文本框绑定到comboBox.SelectedItem 的属性

    我正在使用 winforms 并且有一个代表 IQueryable 的组合框 组合框下方是一系列文本框 我希望将它们绑定到组合框中当前选择的文本框 这是我的代码 public partial class TestForm Form publ
  • 如何访问 keras 中单个自定义损失函数的所有输出

    我正在尝试重现中提出的网络架构本出版物 https www sciencedirect com science article pii S0031320319302031在张量流中 作为一个完全的初学者 我一直在使用本教程 https ww
  • 如何在使用 Component Creator 构建的 Joomla 3.x 组件的一个视图中包含多个模型

    Joomla 组件使用 MVC 模型 Component Creator 是一种广泛使用的工具 其付费级别支持通过 SQL 导入创建多表视图 此外 开发人员根据 Joomla 文档从头开始构建组件 我想构建一个高级组件 充当 仪表板 显示来