Joomla 组件:在视图中包含/需要 php

Posted

技术标签:

【中文标题】Joomla 组件:在视图中包含/需要 php【英文标题】:Joomla Component: include/require php in View 【发布时间】:2015-09-22 14:49:49 【问题描述】:

这是我第一次为 Joomla 3 制作组件。 我正在尝试将 php 网站转换为组件。

几乎我的 php 网站的每个视图都是这样构建的:

标题 侧边栏 导航栏 实际内容 页脚 脚本

所以基本上它看起来像这样:

来自 php 网站的视图

<?php require_once('includes/header.php'); ?>
<body>
<div">
    <?php require_once('includes/sidebar.php') ?>
    <div>
         <?php require_once('includes/navbar.php') ?>
    </div>
    <div>
        <!-- Content or something -->
    </div>
    <?php require_once('includes/footer.php') ?>
</div>
<?php require_once('includes/scripts.php') ?>
<script>
</script>
</body>
</html>

但在 Joomla 中这是不可能的。如果我尝试包含或需要像上面这样的 php 文件,它就不起作用。

组件中的视图如下所示:

com_component
  ../views
    ../tmpl
      default.php
    view.html.php
    ../includes
      header.php
      footer.php
      sidebar.php
      scripts.php
      navbar.php

Default.php 应该在前端显示仪表板。 这就是我在 default.php 中尝试做的事情:

Default.php

<?php include_once('../../includes/header.php') ?>
<body>
<?php include_once('../../includes/sidebar.php') ?>
<?php include_once('../../includes/navbar.php') ?>

 <!-- Some content-->

<?php include_once('../../includes/footer.php') ?>

<!-- etc -->

我做了什么

我发现了一些 JDocument 和 JHTML 函数,它们可以将样式表和 javascript 添加到模板中。但这不是我想要的。

我使用了 Joomla 的 addCustomTag 函数,但它只在模板中显示注释的 php 行。

尝试将其制作成一个字符串并通过变量传递。

问题

是否可以在模板中包含 php 文件(default.php)? 如果没有,还有其他方法吗? 如果是,在 Joomla 中这是一种好的做法吗?

谢谢

【问题讨论】:

【参考方案1】:

你不需要一个组件来做这些。我的意思是你可以 这样做,但它应该只是一个中间步骤,因为 Joomla 旨在通过 API 包含模块来简化这一切,这些模块基本上就是你所有的部分。

你会注意到在 joomla 模板文件中有一些地方是加载模块位置的。这些是菜单、页脚、侧边栏等。

根据它们是什么,您应该真正将这些小节中的每一个都设为一个模块。在某些情况下,您可能可以使用 Joomla 中已经存在的模块,或者如果您只是加载一些 html,则可以制作“自定义 html”模块。在其他情况下,制作一个 joomla 模块真的很容易,只需几个文件,你可以把你的 php 代码放在那里,真正开始你可以把整个东西放在模块的 tmpl/default.php 中,或者你可以将它分开助手和布局。 如果您利用 CMS 而不是与之抗争,从长远来看,您会更快乐。

组件只针对“body”区域,你需要做的是先做模板,然后再做模块。

【讨论】:

【参考方案2】:

要将文件包含在与给定文件相同的目录中,您可以使用:

include __DIR__ . '/../includes/header.php'

如果您不使用 DIR,当前路径与主页(站点根目录中的 index.php)相关,而不与布局(default.php)相关。

一个更兼容 Joomla 的解决方案是将所有“子布局”放在同一个文件夹中,并使用如下常规命名:

com_component/
    views/
        myview/
            view.html.php
            tmpl/
                default.php
                default_header.php
                default_footer.php
                ....

然后您可以在主布局中使用以下代码:

echo $this->loadTemplate('header');
...
echo $this->loadTemplate('footer');

【讨论】:

谢谢,我创建了一个 default_header.php 并在布局中呼应了它,这就成功了

以上是关于Joomla 组件:在视图中包含/需要 php的主要内容,如果未能解决你的问题,请参考以下文章

从模型到视图的 Joomla 组件数据

在根 URL 端点公开 Joomla 组件视图

Joomla 组件多视图

如何在自定义组件视图中添加 joomla 编辑器但不使用 XML 表单字段?

试图在 Joomla 的新组件中添加第二个视图! 3.x

Joomla 3.0 一个具有多个视图的组件