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

Kopusha
#1 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);
}

 


Dit bericht is bewerkt door Kopusha (2020-11-05 10:46, 3 jaren ago)