【问题标题】:How can I display an XML feed without any template code in Joomla?如何在 Joomla 中显示没有任何模板代码的 XML 提要?
【发布时间】:2012-04-16 01:09:30
【问题描述】:

我正在尝试在自定义 Joomla 2.5 组件的视图/布局中显示 XML 提要,但 XML 在站点的 HTML 模板中呈现为常规布局。如何在没有任何模板 HTML 代码的情况下显示 XML?

(在来自 this related question 的 URL 中包含 tmpl=component 的技巧没有帮助,模板中仍然有一些 HTML 输出会破坏 XML。)

我更喜欢只涉及我的自定义组件中的代码更改的解决方案,例如在 Symfony 中调用方法 setLayout(false) 时。

【问题讨论】:

    标签: joomla joomla2.5


    【解决方案1】:

    我找到的唯一解决方案是在当前模板文件夹中创建一个文件,例如“xml.php”,并且只把这个放在文件中:

    <?php
    $document = JFactory::getDocument();
    $document->setMimeEncoding('text/xml');
    echo '<?xml version="1.0" encoding="UTF-8" ?>';
    ?>
    <jdoc:include type="component" />
    

    然后我可以将tmpl=xml 附加到 URL。

    【讨论】:

    • 我添加了 defined('_JEXEC') 或 die('Restricted access');到顶线。像魅力一样工作!
    【解决方案2】:

    [编辑] 我的错,我做了一个假设,你知道这会得到什么。

    Joomla! 1.6->2.5 您可以通过以下方式为现有视图创建替代输出格式:

    1. 调用带有附加格式参数的视图,例如&amp;format=json
    2. 创建匹配的视图类文件,例如view.json.php 可以放在标准的 view.html.php 文件旁边供您查看。

    view.yourformat.php 文件可以以正常方式使用您现有的控制器和模板文件。

    不要忘记将&amp;tmpl=component&amp;tmpl=raw 添加到您的查询字符串中,这样模块等也不会加载。

    tmpl=raw 不会加载 html 正文包围或模板,只会加载主要组件。

    [/edit]

    来自 Joomla!从 1.6 开始(包括 2.5),内置了对控制器格式的支持,即。你为你想要的输出格式创建一个控制器。

    通常会为每个视图命名一个控制器:

    /components/mycomp/controllers/myview.php

    控制器的 XML 版本将是名称:

    /components/mycomp/controllers/myview.xml.php

    JSON 版本是:

    /components/mycomp/controllers/myview.json.php

    要调用控制器的特定格式版本,您只需将 &amp;format=theformatyouwant 添加到 URL 参数中,因此在您的情况下为 &amp;format=xml

    这是discussed in this document from 1.6 days - 我将它用作我们的几个具有 JSON 和 ics 要求的组件的基础。

    【讨论】:

    • 此解决方案需要几乎相同的控制器和视图类副本,这违反了 DRY。我只想要另一个布局,而不是控制器或视图。尽管如此,我还是从你那里学到了一些有价值的东西,谢谢! (另一种解决方案可能是检查控制器中的 XML 类型,更改布局并将类型重置为 HTML 以重用相同的视图类。)
    • 我遗漏了一些东西 - 如果您的内容视图已经是 XML,那么当您只需将现有的 /tmpl/ 文件或子模板文件加载到新文件中时,它如何违反 DRY控制器。鉴于您的上述解决方案。
    • 嗯,新控制器是旧控制器的副本,其中包含一些逻辑。而且新的不能继承旧的,因为它似乎必须具有相同的类名。
    【解决方案3】:

    这个问题让我发疯了几次。

    经过多次挫折,最简单的解决方案是 cppl 建议的解决方案。在您的查询中 字符串放入以下变量:

    format=yourcustomformat
    view=viewname
    

    假设您希望从名为 json 的视图中输出 json。

    使用您的视图名称创建一个 veiw 文件夹

    json
    

    该文件夹中的一个文件名为

    view.json.php
    

    然后在您的 url 字符串中包含以下由 & 符号分隔的 url 参数:

    index.php?option=com_mycomponent&format=json&view=json
    

    cppl 是正确的,这会加载非 html 视图。但是,您不必至少在 2.5 中放入 tmpl 参数。如果视图名称不是view.html.php,那么 2.5 似乎没有在响应中包含分配的站点模板。我认为因为视图不是veiw.html.php,它假定原始输出并且不包含模板。我使用 ajax 调用和对视图的直接 url 调用对此进行了测试,在这两种情况下,我得到的只是组件输出。对!

    如果有人知道 Joomla 人员在哪里详细记录了此问题,请发布!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-16
      • 2014-08-12
      • 2012-12-09
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      相关资源
      最近更新 更多