Joomla从组件创建菜单项

时间:2013-06-28 19:44:25

标签: php joomla joomla2.5 joomla-component

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

现在它可以通过简单的按钮单击来填充所有更新并更新任何更改,或者只更新单个字段。这导致从joomla中的api生成静态“页面”,以及从api更新它的能力。

问题在于它被用作“主页”菜单项,因此组件本身采用根目录。我需要的是每个“页面”自动获取主页的子菜单,虽然只是将主菜单项设置为主页似乎不起作用,它导致JRoute类混淆并使用组件/,我读过的所有内容远程假设它不是默认的菜单项,所以我失去了家,使它完全自动化。

所以我的问题是,是否有一个函数类来从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;
}


?>

评论:

  • Joomla 2.5
  • 组件位于site(home)的根菜单项
  • 组件中的项目必须属于主页后的第一级菜单
  • 链接工作,但是joomla中的JRoute类没有正确地建立链接。

0 个答案:

没有答案