【问题标题】:How to include some php class to Joomla tmpls如何在 Joomla tmpls 中包含一些 php 类
【发布时间】:2014-02-04 11:51:19
【问题描述】:

我需要包含一些必须在许多 tmpls 中重复的 php 代码。我该怎么做,可能包括在内?以及如何以正确的方式用我的类编写 php 文件?换句话说,我需要类似的东西

views/category/tpml/default.php

JLoader::register('MyClass', '/administrator/components/com_mycom/helpers/myclass.php');
$repeatedcode = new MyClass();
echo $resultstr;

views/article/tpml/default.php

JLoader::register('MyClass', '/administrator/components/com_mycom/helpers/myclass.php');
$repeatedcode = new MyClass();
echo $resultstr;

myclass.php

class MyClass {
// some code with string for echo in the end
$resultstr = ...
}

...

更新: @Guilherme 谢谢!所以现在它看起来像

文件/mytemplate/html/com_content/article/default.php:

require_once '/administrator/components/com_mycom/helpers/myclass.php';
MyComHelper::myFunction($param);
$newstring = str_replace($find, $replace, $this->item->text);
echo $newstring;

文件administrator/components/com_mycom/helpers/myclass.php:

defined('_JEXEC') or die;
abstract class MyComHelper
{
    public static function myFunction($param)
    {
    $db = &JFactory::getDBO();
    $query = $db->getQuery(true);
    $query->select($db->quoteName(array('ua', 'ru')))
          ->from($db->quoteName('#__words'));
    $db->setQuery($query);
    $results = $db->loadAssocList();
    $find = array();
    $replace = array();
    foreach ($results as $row) {
     $find[] = $row['ua'];
     $replace[] = $row['ru'];
    }   
    return $find;
    return $replace;
    }
}

此脚本将每个 ua 单词替换为存储在我的数据库中的匹配 ru 单词,如果我直接将脚本添加到 tmpl 则它可以工作。但是在包含文章的情况下,当我打开包含文章的页面时,我会看到仅包含标题而没有其他内容的空白页面,即不显示内容。可能是数组的问题?

【问题讨论】:

    标签: php class joomla include joomla2.5


    【解决方案1】:

    Helper 中包含 php 函数后,您可以将其包含在 tmplrequire_once

        require_once JPATH_COMPONENT.'/helpers/mycom.php';
        MycomHelper::myFunction($param);
    

    MycomHelper是我Helper的类名

    com_mycom/helpers/helper.php

    <?php
    
    // no direct access
    defined('_JEXEC') or die;
    
    // Component Helper
    jimport('joomla.application.component.helper');
    
    class MycomHelper
    {
        public static function dosomething($var)
        {
            return "Helper say: ".$var;
        }
    }
    

    在我的 com_content 视图的 tmpl 中(第一行)

    components\com_content\views\article\tmpl\default.php

    <?php
    
    defined('_JEXEC') or die;
    
    JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
    
        if(!defined('DS')) { define('DS',DIRECTORY_SEPARATOR); }
        require_once JPATH_ROOT.DS."components".DS."com_mycom".DS."helpers".DS."helper.php";
    
        echo MycomHelper::dosomething("hello!!!");
    

    现在,您可以看到短语“Helper say: hello!!!”在每一篇 joomla 中

    【讨论】:

    • 哦,require_once JPATH_COMPONENT.'/helpers/mycom.php';由同一组件文件夹中的 Helper 查找。如果您需要调用另一个文件夹,请将 JPATH_COMPONENT 更改为“/component/com_mycomponent”之类的内容。但我认为您需要在视图上执行此操作
    • 是的,我的意思正是这个 '/administrator/components/com_mycom... 但正如我写的那样,我看到了空白页(但是我没有向任何视图或控制器添加任何行,而只是为了tmpl)。在我的帖子中查看更新
    • 我只能明天做一些测试,也许我会找到比这些提示更好的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2013-04-18
    • 2010-12-31
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多