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

はい、あなたは完全に正しいです。$ countrys = 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を挿入すると、すべてが追加されますが、ネイティブコードで0に割り当てられたparent_idとlevelパラメーターは1に設定します

于 2012-12-16T19:23:33.660 に答える