Дык в $tabs должно быть что-то типа $tabs['#attributes']['class]==array('tabs primary','еще-класс','и т.д.')..
Может быть на уровнях пониже..
Меняйте и рендерьте...
Я о том, что Ваши слова о $tabs в контексте вопроса
"Celsoft" wrote:
Как удалить старые классы у тега ul и присвоить свой класс?
звучат так, будто ТС сам формирует атрибуты. В этом случае задавать вопрос не имеет смысла, не так ли?
Или мне показалось, и Вы просто дали буквальный совет, который, Вы уж простите, не несет никакой полезной информации как для ТС, так и для возможных читателей?
Наверное я немного не понят..
Дело в том, что в семерке рендеринг html из спец.массива, содержащего параметры элемента страницы, обычно производиться в шаблоне(как вы сами заметили - render(что-то))...
т.е. все параметры элемента в шаблоне еще доступны для редактирования,
но правильнее, конечно, их редактировать в хуке preprocess шаблона..
Я просто предложил найти нужный элемент, и изменить его параметр ['#attributes']['class']..
Я не спорю... ваш вариант тоже имеет право на жизнь... а какой выбрать.. пусть решает ТС или
тот,кто найдет в этом топике решение своей проблемы...
Дело в том, что в семерке рендеринг html из спец.массива, содержащего параметры элемента страницы
Согласен с Вами. Однако классы, как видно на этом примере, не всегда присваиваются через #attributes, ибо это происходит, как Вы правильно заметили
"orion76" wrote:
обычно
В данном (и многих других) случае классы присваиваются непосредственно в функции темизации. Более того, поскольку это так, никакие препроцессы не помогут. В самом деле, каким образом template_preprocess поможет изменить классы у вот такого вот ul:
?
Препроцесс помог бы изменить содержимое $variables (в частности — $variables['primary']), но оно (содержимое) всё равно в итоге будет окружено '<ul class="tabs primary">', не так ли?
Таким образом
"orion76" wrote:
ваш вариант тоже имеет право на жизнь...
неверно (хотя, спасибо, конечно), покольку это (я сожалею) — единственный вариант.
OK, с «единственным» я был не прав, но кто для данного случая выберет #pre_render? У Оккама, наверно, от гроба одни щепки остались...
"Celsoft" wrote:
В плане производительности.
"orion76" wrote:
Разница nano-мала -))
Э-э-э нет Писать лишнюю функцию (да с нуля) с повышенным риском ошибиться (а значит — дополнительные исследования) производительность снижает. Небольшое изменение уже готового кода производительность повышает.
Естественно, имеется в виду реальная производительность, т.е. производительность труда. Остальная производительность — от inza лешего.
Ну ё-моё, orion76, ДВЕ функции, рискуем ошибиться в названии функций, названии аргумента, логике ))
Против этого: скопировать функцию, изменить название (можно ошибиться) и просто исправить уже готовый код. Могу поспорить, что операции копипаста выполняются быстрее, чем написание дополнительного кода
И опять же, начальный уровень знаний (либо отсутствие таковых), что, кстати, характерно для большинства вопрошающих здесь однозначно склоняет к более простому варианту (помнится, простота чья-та там родственница))
ser_house везет же Вам. А мне чего то orion76 не помогает. Не знаю по какой причине. Мы проплатили ему деньги месяц назад. А скрипт, который он сделал не работает. И он больше не подходит не на письма, не на мобильник. Мы готов даже добавить скинуться на пиво, можно, бельгийское но хочется что бы orion76 выполнил обязательство или хотя бы уделил нам внимание тоже. Хотя бы скоментировал бы код. Готовы дать заплатить за посредничество. Простите за офтоп
Комментарии
<?php
preg_replace('/class.*=[\',\"]?(.*+)[\',\"]?/', $class, $ul);
?>
Регулярка, ищет класс в переданной строке.
Без кеша лучше не использовать.
Ещё вариант переопределить функцию, кто нибудь ниже напишет.
Не, регулярка не вариант.
Как переопределить функцию?
theme_menu_local_tasks
Спасибо. Проблема решена.
Дык в $tabs должно быть что-то типа $tabs['#attributes']['class]==array('tabs primary','еще-класс','и т.д.')..
Может быть на уровнях пониже..
Меняйте и рендерьте...
Вот интересно, если эти классы добавляет ТС, стал бы он сюда писать?
render вызывает drupal_render, та, естественно, theme, ну и дальше очевидно, куды это всё ведёт.
Ё-моё, люди, неужели так трудно посмотреть код?
Не соображу.. Вы о чем?
Я о том, что Ваши слова о $tabs в контексте вопроса
звучат так, будто ТС сам формирует атрибуты. В этом случае задавать вопрос не имеет смысла, не так ли?Или мне показалось, и Вы просто дали буквальный совет, который, Вы уж простите, не несет никакой полезной информации как для ТС, так и для возможных читателей?
ЗЫ Ничего личного )
Наверное я немного не понят..
Дело в том, что в семерке рендеринг html из спец.массива, содержащего параметры элемента страницы, обычно производиться в шаблоне(как вы сами заметили - render(что-то))...
т.е. все параметры элемента в шаблоне еще доступны для редактирования,
но правильнее, конечно, их редактировать в хуке preprocess шаблона..
Я просто предложил найти нужный элемент, и изменить его параметр ['#attributes']['class']..
Я не спорю... ваш вариант тоже имеет право на жизнь... а какой выбрать.. пусть решает ТС или
тот,кто найдет в этом топике решение своей проблемы...
Согласен с Вами. Однако классы, как видно на этом примере, не всегда присваиваются через #attributes, ибо это происходит, как Вы правильно заметили
В данном (и многих других) случае классы присваиваются непосредственно в функции темизации. Более того, поскольку это так, никакие препроцессы не помогут. В самом деле, каким образом template_preprocess поможет изменить классы у вот такого вот ul:
$output = '';
if (!empty($variables['primary'])) {
$variables['primary']['#prefix'] = '<h2 class="element-invisible">' . t('Primary tabs') . '</h2>';
$variables['primary']['#prefix'] .= '<ul class="tabs primary">';
$variables['primary']['#suffix'] = '</ul>';
$output .= drupal_render($variables['primary']);
}
if (!empty($variables['secondary'])) {
$variables['secondary']['#prefix'] = '<h2 class="element-invisible">' . t('Secondary tabs') . '</h2>';
$variables['secondary']['#prefix'] .= '<ul class="tabs secondary">';
$variables['secondary']['#suffix'] = '</ul>';
$output .= drupal_render($variables['secondary']);
}
return $output;
}
?
неверно (хотя, спасибо, конечно), покольку это (я сожалею) — единственный вариант.Препроцесс помог бы изменить содержимое $variables (в частности — $variables['primary']), но оно (содержимое) всё равно в итоге будет окружено
'<ul class="tabs primary">'
, не так ли?Таким образом
Согласен, в данном случае правка параметров в препроцессе не поможет...
а как же параметр '#pre_render' ? -))
"обрабатывается" в drupal_render ...
ладно... 1:1 - ничья-))
То есть делаем:
//бла-бла-бла
if (!isset($variables['primary']['#pre_render'])) {
$variables['primary']['#pre_render'] = array();
}
array_unshift($variables['primary']['#pre_render'], 'del_facking_css');
//бла-бла-бла
}
function del_facking_css($element) {
$element['#prefix'] = '<h2 class="element-invisible">' . t('Primary tabs') . '</h2>';
$element['#prefix'] .= '<ul class="best-tabs-class">';
return $element;
}
Хм. Если я правильно воспроизвел ЭТО, то да, с единственным я, пожалуй, погорячился. Деваться некуда — согласен на
P.S.:
Всё-таки мне кажется, что этот вариант (безусловно, имеющий право на жизнь) чересчур, учитывая простоту изменения theme (не удержался... ;))
<?php
function MY_THEME_preprocess_menu_local_tasks(&$variables) {
$variables['primary']['#pre_render'][]='del_facking_css';
}
?>
А если #pre_render не isset?
Дык мыж не извлекаем из него значение, а присваиваем... Значит станет isset...
В итоге какой вариант лучше? В плане производительности.
Разница nano-мала -))
OK, с «единственным» я был не прав, но кто для данного случая выберет #pre_render? У Оккама, наверно, от гроба одни щепки остались...
Э-э-э нет Писать лишнюю функцию (да с нуля) с повышенным риском ошибиться (а значит — дополнительные исследования) производительность снижает. Небольшое изменение уже готового кода производительность повышает.
Естественно, имеется в виду реальная производительность, т.е. производительность труда. Остальная производительность — от
inzaлешего.3 строчки, без заголовков..
-))
Ну ё-моё, orion76, ДВЕ функции, рискуем ошибиться в названии функций, названии аргумента, логике ))
Против этого: скопировать функцию, изменить название (можно ошибиться) и просто исправить уже готовый код. Могу поспорить, что операции копипаста выполняются быстрее, чем написание дополнительного кода
И опять же, начальный уровень знаний (либо отсутствие таковых), что, кстати, характерно для большинства вопрошающих здесь однозначно склоняет к более простому варианту (помнится, простота чья-та там родственница))
Во-о-о-т... 2:1, не?)
Судью на мыло!!-))
ser_house везет же Вам. А мне чего то orion76 не помогает. Не знаю по какой причине. Мы проплатили ему деньги месяц назад. А скрипт, который он сделал не работает. И он больше не подходит не на письма, не на мобильник. Мы готов даже добавить скинуться на пиво, можно, бельгийское но хочется что бы orion76 выполнил обязательство или хотя бы уделил нам внимание тоже. Хотя бы скоментировал бы код. Готовы дать заплатить за посредничество. Простите за офтоп