2013-12-18 75 views
0

我为Joomla2.5站点的前端开发了几个模块,但它们在后端也可以很方便。有没有办法从后端加载前端模块(后端我的意思是管理员界面)?在Joomla Backend中加载前端模块

我已将以下代码输入到表单视图中。

$module = JModuleHelper::getModule('mod_name_of_module'); 
$moduleHtml = JModuleHelper::renderModule($module); 
echo $moduleHtml; 

但它没有给任何东西。如果我使用的print_r($模块)我得到

stdClass Object ([id] => 0 [title] => [module] => mod_name_of_module [position] => [content] => [showtitle] => 0 [control] => [params] => [user] => 0 [style] => none) 

这基本上意味着它没有找到该模块,因为我想在这种情况下加载模块具有136的ID,而不是0

有没有人管理这么?如果是这样的:如何?

在此先感谢和圣诞快乐:)

回答

0

的问题是,它是寻找与它在应用程序相关的模块,具体代码看管理模块,文件夹,你希望它是看着网站模块文件夹。这是两个独立的应用程序。

https://github.com/joomla/joomla-cms/blob/master/libraries/cms/module/helper.php#L347

最简单的事情显然是做什么的核心做了,基本上在每一个应用程序都提供相同的模块。模块通常在很大程度上非常小,这几乎不会比解决这个需要重新考虑JModuleHelper的问题更多的代码。

0

正如Elin所说,JModuleHelper只能在后端调用它时才能在后端加载模块。遵循Elin的链接,您可以找到源代码JModuleHelper以及从数据库中读取模块信息的实际功能load()。 (警告:该行可能会在未来发生改变),这里是我的 “黑客” 我的应用程序(在测试的Joomla 3.1.5!):

function getModule($moduleName, $instanceTitle = null){ 
    $db = JFactory::getDbo(); 

    $query = $db->getQuery(true) 
    ->select('m.id, m.title, m.module, m.position, m.content, m.showtitle, m.params') 
    ->from('#__modules AS m') 
    ->where(Array(
     'm.published = 1' 
     , 'm.module = ' . $db->quote($moduleName) 
    )); 
    if ($instanceTitle){ 
    $query->where('m.title = ' . $db->quote($instanceTitle)); 
    } 

    $db->setQuery($query); 
    try 
    { 
    $modules = $db->loadObject(); // You might want to use loadObjectList() instead 
    } 
    catch (RuntimeException $e) 
    { 
    JLog::add(JText::sprintf('JLIB_APPLICATION_ERROR_MODULE_LOAD', $e->getMessage()), JLog::WARNING, 'jerror'); 

    $clean = array(); 
    return $clean; 
    } 
    return $modules; 
} 

使用案例:

$module = getModule('mod_your_module', 'The name of the module instance'); 
$params = new JRegistry; 
$params->loadString($module->params); 
require_once JPATH_SITE . '/modules/mod_your_module/helper.php'; // I have a helper class to format the params before render. So I reuse this helper here. 
$params = ModYourModuleHelper::getParams($params); 
1

在你* .XML配置文件,你可以只简单地改变:

<extension type="module" version="3.1.0" client="site" method="upgrade"> 

这样:

<extension type="module" version="3.1.0" client="administrator" position="menu" method="upgrade"> 

并像通常一样安装/发现模块,就像前端扩展一样。然后,您可以更改位置等,并进行必要的更改以显示您的视图,因为您希望它们呈现。