|
MihaKot
Аксарин Константин
Зарегистрирован: 2005-01-22
Сообщений: 38
|
Вот загвоздка.
если написать так.
Код:
$menu_text[top][active] = "".opt($data[$i][menu]==1,"<div
class='MenuText'><a href='%URL' title='%NAME'><span
class='l'>".preg_replace('/(^.)/', '$1</span>','%NAME')."</a></div>")."";
то выведет %NAME
а если
Код:$menu_text[top][active] = "".opt($data[$i][menu]==1,"<div
class='MenuText'><a href='%URL' title='%NAME'><span
class='l'>".preg_replace('/(^.)/', '$1</span>','%NAME')."</a></div>")."";
то выведет О копании
Это как понимать?
|
|
DiGGy
DiGGy
Зарегистрирован: 2005-04-04
Сообщений: 1546
|
mihakot писал(а):Это как понимать?
Во-первых, давайте посмотрим код процедур, куда Вы передаете эти данные.
А там Вы обнаружите что-то типа такого
Код:
...
eval( ... $menu_text[top][active] ... );
...
str_replace("%NAME",....);
...
т.е. Ваша переменная сначала выполняется, а потом подсталвются переменные %NAME и т.д.
В Вашем первом случае результатом выполнения preg_replace будет "%</span>NAME", что ясен пень не идентично с "%NAME", поэтому подстановка наименования раздела не осуществляется.
В Вашем втором случае результатом выполнения preg_replace будет "</span>%NAME", где потом "%NAME" заменяется на название раздела.
Во-вторых, Ваше регулярное выражение не учитывает всякие допустимые нюансы, например - название раздела может содержать ведущие пробелы, т.е. " О компании" - в этом случае Вы выделете не первую букву, а пустое место
В-третьих, мой Вам совет, скажу даже два примитивных варианта решения:
1. Использование своих функций:
Напишите свой sql запрос, в котором Вы от названия раздела уже отделите первую букву и выведите текст так, как Вам надо.
2. Использование стандартных функций: Объявляете переменную, вызываете процедуру неткета, а потом результат работы процедуры парсите по придуманной Вами логике. Для этой реализации предлагаю Вам ввести дополнительный символ, например ~ пример ниже:
Код:
$menu_text[top][active] = "<a href='%URL'>~%NAME~</a>";
preg_replace("/~(.)(.*)~/U","<span class='l'>$1</span>$2", s_browse_sub(..,$menu_text[top]) );
зы: допустимые ведущие пробелы в примере не удаляются, это уж Вы сами сделайте, и так всё расписал по деталям...
удачи.
Temet nosce...
|
|
MihaKot
Аксарин Константин
Зарегистрирован: 2005-01-22
Сообщений: 38
|
Спасибо за идею.
Код:
$menu_text[bot][active] = "".opt($data[$i][menu]==2,"<div class='MenuText'><a href='%URL' title='%NAME'>~%NAME</a></div>")."rn";
а замена вот так
Код:
".preg_replace('/(.*)~(.)(.*)</a>(.*)rn/', "$1<span class='l'>$2</span>$3</a>$4rn", s_browse_level(0,$menu_text[top]))."
Наличие пробела в начала не имеет значения.
|