0

我能够$data从表单中获取数组,并且可以为每个项目生成数据......但是在使用 jTable 对象绑定和存储期间,它只保存最新的项目,为什么......我正在使用本机 JTableMenu 类来绑定和保存通过使用我自己的类,该类由本地类扩展。早期试验我使用数据库对象来保存带有 sql 语法的项目,但表的某些列仍然是空的 lft 和 rgt 来填充它们我使用了表对象,但它给出了这个问题。

整个代码如下:

function addcumulative($data){
    $db = JFactory::getDBO();
    $component = & JComponentHelper::getComponent('com_dratransport');
    $menus = array();
    $query = array();
    $countries = DraTransportHelperArrays::countries();
    $cities = DraTransportHelperArrays::cities();


    $title = array();
    $alias = array();
    $path  = array();
    $link = array();

    if(empty($data['parent_id']) && $data['parent_id'] == 0){
        $data['parent_id'] = 1;
    }else{
        $parent_id = explode('.',$data['parent_id']);
        $data['parent_id'] = $parent_id[1];
    }

    if(!empty($data['locationQuery'])){ //actually this part will be used
        $loc = ($data['locationQuery'] == 'countries') ? $countries : $cities['Turkey'] ;   

        foreach($loc as $k => $c){
            $query[0] = $data['general'];
            foreach($data as $key => $dat){
                if(!empty($dat) && strpos($key,'Query') !== false){
                    $v = explode('Q',$key);
                    if($v[0] !== 'location'){
                        $query[] = '&'.$v[0].'='.$dat;
                    }else{
                        $query[] = '&'.$dat.'='.$k;
                    }
                }
            }   
            $title[] = $data['viewQuery'].'-'.$k;
            $alias[] = $data['viewQuery'].'-'.$k;
            $path[] = $data['viewQuery'].'-'.$k;                
            $link[] = implode('',$query);
            $query = array();
        }

    }else{
        $query[0] = $data['general'];
        foreach($data as $key => $dat){             
            if(!empty($dat) && strpos($key,'Query') !== false){
                $v = explode('Q',$key);
                $query[] = '&'.$v[0].'='.$dat;
            }
        }
        $link[] = implode('',$query);
    }

    foreach($link as $n => $l){
        $menus[] = array(
                         'menutype'     =>  $data['menutype'],
                         'title'        =>  $title[$n],
                         'alias'        =>  $alias[$n],
                         'path'         =>  $path[$n],
                         'link'         =>  $link[$n],
                         'type'         =>  'component',
                         'published'    =>  1,
                         'parent_id'    =>  $data['parent_id'],
                         'level'        =>  1,
                         'component_id' =>  $component->id,
                         'access'       =>  $data['access'],
                         'params'       =>  $data['params'],
                         'language'     =>  '*'
                    );
    }

    $count = $data['count'] == 0 ? count($loc) : $data['count'];    
    foreach($menus as $menu){
        // Bind the data.
        $table  = $this->getTable();
        $table->bind($menu);                
        $table->store();            
    }
}
4

1 回答 1

0

是的,你完全正确。假设 $countries=array('England','France','Germany'); 然后我在模型中编写代码以在#__menu 表中生成链接。所以我写

foreach($countries as $country){
$link='index.php&option=com_mycomponent&view=members&type=1&countries='.$country;
$table->bind();
$table->save();
}

我正在生成这样的链接,视图和查询中的类型值来自提交的表单,以使除国家/地区以外的所有菜单的参数都相同;我将所有参数分配给 manu 项,并将菜单项作为数组项分配给数组...以保存该表附带的嵌套数据库。

$menus->$each menu as $menus array item->menu item parameters

虽然表是在上面的代码代码中首次创建的,但只是添加了最后一个菜单项,但如果我将它放入 foreach 中,它会添加所有这些,但 parent_id 和 level 参数分配给 0 由本机代码设置,我将它们设置为 1

于 2012-12-16T19:23:33.660 回答