Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Joomla从组件创建菜单项_Php_Joomla_Joomla2.5_Joomla Component - Fatal编程技术网

Php Joomla从组件创建菜单项

Php Joomla从组件创建菜单项,php,joomla,joomla2.5,joomla-component,Php,Joomla,Joomla2.5,Joomla Component,这是我当前的组件设置。我有一个非常动态的页面生成组件,它与外部API的数据同步,为产品创建页面,而无需额外的数据输入 现在,它只需单击一个简单的按钮即可填充所有内容并更新任何更改,或者只更新单个字段。这将导致从joomla中的api生成静态“页面”,并能够从api进行更新 问题在于,它被用作“主”菜单项,因此组件本身采用根目录。我需要的是每个“页面”自动获取home的子菜单,尽管仅仅将主菜单项设置为home似乎不起作用,但这会导致JRoute类变得混乱,并使用component/,到目前为止,我

这是我当前的组件设置。我有一个非常动态的页面生成组件,它与外部API的数据同步,为产品创建页面,而无需额外的数据输入

现在,它只需单击一个简单的按钮即可填充所有内容并更新任何更改,或者只更新单个字段。这将导致从joomla中的api生成静态“页面”,并能够从api进行更新

问题在于,它被用作“主”菜单项,因此组件本身采用根目录。我需要的是每个“页面”自动获取home的子菜单,尽管仅仅将主菜单项设置为home似乎不起作用,但这会导致JRoute类变得混乱,并使用component/,到目前为止,我阅读的所有内容都假定它不是默认菜单项,因此我正在失去home,使其完全自动

所以我的问题是,有没有一个函数类可以从joomla中的组件创建菜单项?为每个页面向joomla菜单表添加另一行在我更新它们时“应该”解决了这个问题,我知道我可以自己尝试找出joomla如何将它们添加到数据库中,但是如果可能的话,我更喜欢使用joomla类/函数,有什么想法吗

这是我当前的router.php,可以直接链接到页面,但在使用JRoute时不行。有一些非必需的部分,这是因为我已经做了一些广泛的测试虽然

<?php
defined('_JEXEC') or die;

function GoFormsBuildRoute($query){
    $segments = array();
    $app        = JFactory::getApplication();
    $menu       = $app->getMenu();
    $params     = JComponentHelper::getParams('com_goforms');
    $db = JFactory::getDBO();
    if (empty($query['Itemid'])) {
        $menuItem = $menu->getActive();
        $menuItemGiven = false;
    }
    else {
        $menuItem = $menu->getItem($query['Itemid']);
        $menuItemGiven = true;
    }
    //print_r($menuItem);
    if(isset($query['option'])){
        unset($query['option']);
    }
    if(isset($query['view'])){
        $view = $query['view'];
    }else{
        return $segments;
    }
    unset($query['view']);
    if(isset($query['id'])){
        if ($menuItemGiven && isset($menuItem->query['id'])) {
            $mCatid = $menuItem->query['id'];
        } else {
            $mCatid = 0;
        }
        //echo 'hi';
        if(strpos($query['id'], ':') === false) {
            $db = JFactory::getDbo();
            $aquery = $db->setQuery($db->getQuery(true)
                ->select('alias')
                ->from('#__goforms_list')
                ->where('id='.(int)$query['id'])
            );
            $alias = $db->loadResult();
            $query['id'] = $alias;
        }
        $segments[] = $query['id'];
        unset($query['id']);
    }
    print_r($segments);

    return $segments;
}

function GoFormsParseRoute($segments){
    $vars = array();
    $app        = JFactory::getApplication();
    $menu   = $app->getMenu();
    $item   = $menu->getActive();
    $params     = JComponentHelper::getParams('com_goforms');
    $db = JFactory::getDBO();
    print_r($item);
    $count = count($segments);
    if($count == 1){
        if(isset($segments[0])){
            $vars['view'] = 'region';
            $alias = str_replace(':','-',$segments[0]);
            //print_r($alias);
            //echo '<br>';
            $query = 'SELECT alias, id FROM #__goforms_list WHERE alias = "'.$alias.'"';
            $db->setQuery($query);
            $page = $db->loadObject();
            if($page){
                $vars['view'] = 'region';
                $vars['id'] = (int)$page->id;
                return $vars;
            }else{
                $vars['view'] = 'goforms';
            }
        }else{
            $vars['view'] = 'goforms';
        }
    }
    return $vars;
}


?>

审查中:

  • 约姆拉2.5
  • 组件位于站点的根菜单项(主页)
  • 组件中的项目需要在主菜单后位于第一级菜单下
  • 链接可以工作,但是joomla中的JRoute类不能正确创建链接

Hi@REaction,关于这里可能存在的问题,我有一些想法,但首先,我有几个问题来澄清一些细节:您提到的组件是自定义扩展吗?是的,我会将router.php文件添加到此文件中。它是使用joomla MVC“标准”编写的吗?2-什么版本的Joomla?您是否使用SEF、mod_rewrite、.htaccess或任何第三方SEF扩展?Gez IGNORE*PS什么意思,你会“…将outer.php文件添加到这个”中?忽略*我现在明白了没有,只是尝试使用默认joomla路由,没有什么特别的。我希望它在不依赖其他扩展的情况下工作。只需为组件中的每个项目创建url site.com/page,这样组件就会使用主菜单项,并且每个页面都会从那里自动运行。好的,大概是J2.5,对吗?嗯,我似乎记得,当您将一个组件设置为主页(默认)菜单项时,就主页的路由链接而言,有一些棘手的事情需要注意。