Forums / National / Russian / Тех. поддержка / cot_selectbox_structure

Kopusha
#45188 2020-11-05 09:36

Помогите написать код или поделитесь готовым. Есть такая функция - 

"PRDADD_FORM_CAT" => cot_selectbox_structure('market', $ritem['item_cat'], 'rcat'),

Она формирует выпадающий список из структуры модуля. У меня в i18n_structure есть переведенная структура, как дописать свою функцию для вывода с учетом локализации?

function cot_selectbox_structure($extension, $check, $name, $subcat = '', $hideprivate = true, $is_module = true,
                                 $add_empty = false, $attrs = '', $custom_rc = '')
{
    global $structure;
 
    $structure[$extension] = (is_array($structure[$extension])) ? $structure[$extension] : array();
 
    $result_array = array();
    foreach ($structure[$extension] as $i => $x)
    {
        $display = ($hideprivate && $is_module) ? cot_auth($extension, $i, 'W') : true;
        if ($display && !empty($subcat) && isset($structure[$extension][$subcat]))
        {
            $mtch = $structure[$extension][$subcat]['path'].".";
            $mtchlen = mb_strlen($mtch);
            $display = (mb_substr($x['path'], 0, $mtchlen) == $mtch || $i === $subcat);
        }
 
        if ((!$is_module || cot_auth($extension, $i, 'R')) && $i!='all' && $display)
        {
            $result_array[$i] = $x['tpath'];
        }
    }
    $result = cot_selectbox($check, $name, array_keys($result_array), array_values($result_array), $add_empty, $attrs, $custom_rc);
 
    return($result);
}

 

Added 55 minutes later:

В итоге благодаря Виктору сделал, с небольшим комстылем. Готовый код - 

function cot_selectbox_structure($extension, $check, $name, $subcat = '', $hideprivate = true, $is_module = true,
                                 $add_empty = false, $attrs = '', $custom_rc = '')
{
    require_once cot_incfile('i18n', 'plug');
    global $structure, $i18n_structure, $i18n_enabled, $i18n_read, $i18n_notmain, $i18n_locale;
    $i18n_locale = cot_import('l', 'G', 'ALP');
    $structure[$extension] = (is_array($structure[$extension])) ? $structure[$extension] : array();
 
    $result_array = array();
    foreach ($structure[$extension] as $i => $x)
    {
        $display = ($hideprivate && $is_module) ? cot_auth($extension, $i, 'W') : true;
        if ($display && !empty($subcat) && isset($structure[$extension][$subcat]))
        {
            $mtch = $structure[$extension][$subcat]['path'].".";
            $mtchlen = mb_strlen($mtch);
            $display = (mb_substr($x['path'], 0, $mtchlen) == $mtch || $i === $subcat);
        }
 
        if ((!$is_module || cot_auth($extension, $i, 'R')) && $i!='all' && $display)
        {
            $result_array[$i] = $x['tpath'];
        }
         
        if ($i18n_locale && $i18n_locale != 'en')
        {
            $cat_title = $i18n_structure[$i][$i18n_locale];
            $result_array[$i] = $cat_title['title'];
        }      
    }
    $result = cot_selectbox($check, $name, array_keys($result_array), array_values($result_array), $add_empty, $attrs, $custom_rc);
 
    return($result);
}

Пришлось 

if ($i18n_locale && $i18n_locale != 'en')

так как почемуто в forms.php не идет проверка на $cfg['plugin']['i18n']['defaultlang']

Added 15 minutes later:

И не смог справится с подкатегориями

Вот код где надо добавить условие если не en язык то брать title подкатегории с i18n, помогите

function cot_structure_children($area, $cat, $allsublev = true,  $firstcat = true, $userrights = true, $sqlprep = true)
{
    global $structure, $db;
 
    $mtch = '';
    $mtchlen = $mtchlvl = 0;
 
    if ($cat != '')
    {
        $mtch = $structure[$area][$cat]['path'] . '.';
        $mtchlen = mb_strlen($mtch);
        $mtchlvl = mb_substr_count($mtch, ".");
    }
 
    $catsub = array();
    if ($cat != '' && $firstcat && (($userrights && cot_auth($area, $cat, 'R') || !$userrights)))
    {
        $catsub[] = $cat;
    }
 
    foreach ($structure[$area] as $i => $x)
    {
        if (($cat == '' || mb_substr($x['path'], 0, $mtchlen) == $mtch) && (($userrights && cot_auth($area, $i, 'R') || !$userrights)))
        {
            //$subcat = mb_substr($x['path'], $mtchlen + 1);
            if ($allsublev || (!$allsublev && mb_substr_count($x['path'],".") == $mtchlvl))
            {
                $i = ($sqlprep) ? $db->prep($i) : $i;
                $catsub[] = $i;
            }
        }
    }
    return($catsub);
}

 

This post was edited by Kopusha (2020-11-05 10:46, 4 years ago)