【问题标题】:Understanding jdoc:include in Joomla了解 jdoc:include 到 Joomla
【发布时间】:2016-04-20 23:10:47
【问题描述】:

我是 Joomla 的新手,想了解 Joomla 的一项功能。

在我们使用的 joomla 模板中

jdoc:include type="component"

声明。但我无法理解这个功能是如何在 Joomla 中实现的。上面的 Joomla 语句如何在 url 中传递组件名称?请帮我理解。

【问题讨论】:

  • 您阅读过手​​册/文档的哪些部分您不理解?
  • 我已阅读 jdoc 语句文档。 docs.joomla.org/Jdoc_statements
  • 但是。我想了解这个功能是如何在 joomla 库中实现的

标签: php oop joomla joomla2.5


【解决方案1】:

如何在 url 中传递组件名称由上面呈现 Joomla 的声明?

为了澄清 jdoc 语句未在 URL 中传递。当 Joomla 在您的模板中呈现 index.php 并到达 <jdoc:include type="component" /> 时,它将用实际页面内容替换该代码块。

有一些不同的 jdoc 语句,您最常遇到的有:

<jdoc:include type="component" /> 用于页面内容
<jdoc:include type="head" /> 用于页面头部内容
<jdoc:include type="message" /> 用于系统消息
<jdoc:include type="module" name="nav" title="Nav menu" /> 用于显示单个模块,在本例中为导航
<jdoc:include type="modules" name="col-right" style="xhtml" /> 在模板上定义位置,您可以在其中放置任意数量模块的输出(感谢 Elin 指出我对此的疏忽)

您将拥有任意数量的具有不同模块名称的 jdoc 语句,其他的应该只在您的模板中出现一次。

更多详情
不同的 jdoc 语句:https://docs.joomla.org/Jdoc_statements
解析是如何工作的:https://api.joomla.org/cms-2.5/classes/JDocumentHTML.html

=== 更新===

这个语句如何知道应该呈现哪个内容页面?是 这通过 view="Page_name" ??

是的,这是正确的。如果你去

domain.com/index.php?option=com_content&view=article&id=1 

在解析模板的index.php文件时,Joomla会在到达<jdoc:include type="component" />时插入第1条的内容

这里有更多关于解析过程中发生的事情的信息
https://docs.joomla.org/Advanced_topics

jdoc 语句由
中的类呈现 /libraries/joomla/document/html/renderer/

希望这会有所帮助!

【讨论】:

  • 谢谢大卫。但是,我不理解的一件事是“当 Joomla 在您的模板中呈现 index.php 并到达 时,它将用实际页面内容替换该代码块。”该语句如何知道应该呈现哪个内容页面?这是通过view="Page_name"吗??
  • 我会将modules添加到常用列表中。
  • 感谢@Elin 的评论,除了上述 djoc 声明中的第 4 项之外,您还有其他想法吗?
  • Module和modules不同。
  • @Elin ...谢谢,我在那里的吸收有点慢。完成了:)
【解决方案2】:

joomla 是根据 MVC mdoel 设计的。在 joomla 中我们有这些扩展:

  • 组件
  • 模块
  • 插件
  • 模板 在方法 jdoc:include 类型中 通常描述扩展的类型。 和 jdoc:inluce 也用于确定 模板的位置。

【讨论】:

    【解决方案3】:

    模板是如何执行的?

    模板分两阶段执行,充分利用 PHP 解析器,为模板设计者提供相当大的灵活性和性能。模板在文档对象的上下文中执行,因此 $this 对象始终是 JDocument 类的实例化。

    在模板执行开始之前,组件将被执行并缓冲其输出以供以后使用。

    然后模板执行如下:

    • 已加载模板参数(如果有)。
    • 已加载模板语言(如果有)。
    • 如果旧模式已开启,则配置变量将被复制为全局变量。
    • 模板文件 (index.php) 已加载并执行(通过 PHP)。输出被缓冲。这是两阶段过程的第一阶段。标签之间的所有内容都作为 PHP 代码执行。这些标签之外的所有内容都会被输出,否则会被忽略。由于正在缓冲输出,因此在此阶段不会向客户端 Web 浏览器发送任何内容。
    • 首先在 Joomla! 中查找 favicon.ico 文件。根目录,然后在模板根目录中。如果找到,后者将覆盖前者。
    • 现在解析在阶段 1 中缓冲的输出以查找元素。这是该过程的第 2 阶段。对于找到的每个 jdoc 元素,都会加载相应的渲染器类并调用其渲染方法。 render 方法的输出替换了输出缓冲区中的元素本身。在模块渲染器类的情况下,这会触发模块的执行和它们的输出缓冲。
    • 某些特定于模板的 HTTP 标头被添加到要输出的标头列表中。
    • 然后将控制权传递回 JApplication 对象,该对象将处理将现在呈现的网页返回到客户端 Web 浏览器的其余过程。

    from Joomla Documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多