[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Рекурсивный перебор параметров
McLotos
Добрый день!
В общем продолжаю возиться со своим велосипедом, теперь возникла новая проблема, стал получать ошибку Maximum function nesting level of '100' reached, aborting!
добавил в код ini_set('xdebug.max_nesting_level', 200);
и ошибка не исчезла, поднял до 10000 упал апач.
В общем к сути:
есть шаблон
<div class="block" id="{GOODS.Id}">
<div
class="name">
<a
href="{GOODS.Link}"><h2>{GOODS.Title}</h2>{GOODS.Descr}</a>
<div
id="rating"></div>
<img
src="{GOODS.Logo}"/>
</div>
<div
class="image"><img src="{GOODS.Image}"></div>
<input
type="checkbox" id="{GOODS.Id}" name="{GOODS.Title}" value="{GOODS.Value}" class="buy"/>
<label
for="{GOODS.Id}">
<span
class="checked">В Корзину</span>
<span
class="unchecked">Убрать</span>
</label>
<span
class="price">{GOODS.Price} T</span>
<div
class="description">{GOODS.Description}</div>
</div>

есть код который должен заменить все {GOODS.*} на их значения
function replaceTags($elem)
{//elem это div в котором лежит вышеуказанный код
for($i=0;$i<$elem->childNodes->length;$i++)//проверяем сколько раз вставлен код в elem
{
if($elem->childNodes->item($i)->hasAttributes() === TRUE)
{
foreach ($elem->childNodes->item($i)->attributes as $attr)
{
if(array_key_exists($attr->nodeValue,$this->vars) === TRUE)
{
if(is_array($this->vars[$attr->nodeValue]) === FALSE) //такого по идее быть не может, просто для очистки совести
{$elem->childNodes->item($i)->setAttribute($attr->nodeName,$this->vars[$attr->nodeValue]);}
else //скорее всего сработает именно эта часть
{$elem->childNodes->item($i)->setAttribute($attr->nodeName,$this->vars[$attr->nodeValue][$i]);}
}
}
}

if(array_key_exists($elem->childNodes->item($i)->nodeValue,$this->vars) === TRUE)
{$elem->childNodes->item($i)->nodeValue=$this->vars[$elem->childNodes->item($i)->nodeValue];}
else
{$this->replaceTags($elem);}
}

Подскажите как по-другому можно реализовать
Конечно можно легко сделать это используя прямые координаты элементов, ну например тот же label будет
$elem->childNodes->item($i)->childNodes->item(3)
Или ещё проще использовать stripos и str_replace
Но в таком случае теряется гибкость, если изменить структуру шаблона то работать не будет, уже пробовал :(


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.