bondarev.pp.ru

bondarev.pp.ru
Рейтинг
202
Регистрация
29.09.2005
Yaroslav_Adv:
На самом деле, его можно придумать, если только накуриться. А если накуриться, то первое место в выдаче вызовет хороший такой смех. И все нормально.

Ишь какой умный Яндекс. По всем запросам, задать которые можно только накурившись, Яндекс специально генерит смешную выдачу :)

-Ольга-, здоровый образ жизни добавил

Адепт, Создание сайтов есть в Hi-Tech/Интернет, а графический дизайн подумаю куда пихнуть.

Адепт, стоматология Есть (Наука/Медицина/Стоматология).

А дизайн вы какой имете в виду?

d-man:
В разделе Хай-тек можно добавить раздел связь и телекоммуникации - думаю многим пригодится. А вот если ещё и подразделы типа "Сотовя связь","Радиосвязь" то вообще было б шикарно! 🙄

Спасибо, сделано.

я второй!

Правильно ли я понял, что Minimus от Strandart отличается лишь тем, что во втором анкоры вы придумываете сами?

Исходный массив $list

Получаем $array

Да, задача не тривиальная :) Тоже пришлось побиться минут 15.

Самый логичный, казалось бы путь - пройтись по линейному списку и дать каждому элементу parent_id, а зетем уже конвертировать в дерево с момощью рекурсии.

Но есть более быстродействиенный метод:

$array = array ();
$way = array();
$lastlevel = 1;
$cnt = 0;
foreach ($list as $id=>$item) {
if ($item['level'] > $lastlevel) {
$way[] = $id;
} else if ($item['level'] == $lastlevel) {
if ($cnt > 0) {
array_pop($way);
}
$way[] = $id;
} else {
array_pop($way);
array_pop($way);
$way[] = $id;
}
$lastlevel = $item['level'];
$str = '$array';
$wcnt = 0;
foreach ($way as $id) {
$str .= (($wcnt > 0)?'[\'tree\']':'') . "[{$id}]";
$wcnt ++;
}
$str .= ' = $item;';
eval($str);
$cnt ++;
}

Тут приходится прибегать к функции eval() - это сильно усложняет чтение кода и портит его логику. Программисты не любят эту функцию. Но использовать здесь рекурсию, имхо, еще хуже :)

В общем, идея такая: мы пробегаемся по списку и для каждого элемента генерим строку вроде

$array[3]['tree'][4]['tree'][5] = $item;

а затем заставляем интерпретатор отработать эту строку с помощью eval().

В массиве $way мы храним номера родительских элементов. То есть 3, 4, 5. Если level текущего элемента больше level прошлого элемента, добавляем к этому массиву номер текущего элемента. Если они равны - убираем один и заменяем его новым. Если level текущего элемента меньше, чем level прошлого, убираем два номера и добавляем текущий.

Скрипт работает. Проверил.

Только для простоты ключами многоуровневого массива сделал id элементов. Но это вам, я думаю, несущественно.

topol:
с тех пор кроме урла главной страницы не записал, а тем более не запонил, ни одного урла, будь он динамический или "человекоподобный"(придумали же)

Я помню http://nic.ru/whois/, но не запомнил бы http://nic.ru/?page=whois

Помню http://artlebedev.ru/kovodstvo/, но не запомнил бы http://artlebedev.ru/?id=5

это для примера.

У ЧПУ есть еще два навигационных преимущества:

1) Наведя на ссылку мышью, можно посмотреть в статусбар и понять, куда эта ссылка ведет.

2) Чтобы подняться в структуре сайта на один раздел выше, достаточно удалить все после соответствующего слэша. На некоторых сайтах это не продумано - но это ошибка реализации ЧПУ, а не самой идеи.

Владимир-C, если вы мокупаете ссылки для ТИЦа, то вы верно рассуждаете.

Всего: 3570