Здравствуйте, помогите пожалуйста упростить код, чтоб переменные не плодить.
<?php
$a
= 11; // термины
$b = 12;
$c = 13;
// Получить все термины текущей ноды
if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
$node = node_load(arg(1));
$taxonomy=$node->taxonomy;
foreach($taxonomy as $term_id=>$term_info) {
if ($term_id == $a || $term_id == $b || $term_id == $c ) {
return TRUE;
}
}
}
//Сравнивается термин
if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2)) && arg(2) == $a || arg(2) == $b || arg(2) == $c ) {
return TRUE;
}
?>
Комментарии
<?php
$allowed_terms = array(11, 12, 13);
if(in_array($term_id, $allowed_terms)) {
}?>
Спасибо
Если я все правильно понял то код будет иметь следующий вид:
<?php
$allowed_terms
= array(11, 12, 13);// термины// Получить все термины текущей ноды
if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {$node = node_load(arg(1));
$taxonomy=$node->taxonomy;
foreach($taxonomy as $term_id=>$term_info) {
if(in_array($term_id, $allowed_terms)) {
return TRUE;
}
}
} //Сравнивается термин
if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) {
if(in_array(arg(2), $allowed_terms)) {
return TRUE;
}
} ?>
вроде работает
<?php
$terms = array(11,12,13);//термины
$a= arg();// получить аргументы единоразово, чтоб не вызывать 500 раз функцию arg(); Да, мы добавили еще одну лишнюю переменную.
return (bool)(
($a[0] == 'node'&&is_numeric($a[1])&&!$a[2]&&array_intersect($terms,array_keys(node_load($a[1])->taxonomy)))
||
($a[0] == 'taxonomy'&&$a[1] == 'term'&&isset($a[2])&&in_array($a[2],$terms))
);
?>
Согласен, спасибо