Какие-то другие способы существуют, может функции прокрутки какие или..?
На js, если знаете на сколько и куда опускать страницу (вверх-вниз) реализуется так:
window.scroll(0,1000);
window.scroll(0,-1000);
Еще потребоваться может определение текущей позиции, чтоб от нее поднять-опустить страницу - это на jquery относительно легко делается, но всё равно гемор.
На php можно не только через ГЕТ, но и через РОСТ запрос передать переменную, которая и будет определять куда именно сдвинуть страницу, предварительно только установить счетчик положения нужно в нуль, но это - морока... Лучше просто якорем - самый простой и эффективный способ.
Через ПОСТ нужно форму писать и кнопочку ставить - не всегда удобно и не везде подходит.
JustUserR, спасибо, я идею уже понял как сделать можно... перепробовал все варианты: одномерные массивы, двумерные и многомерные вложенные, сортировал по разному и т.д. Попытался без дерева всё сделать, просто пробежав несколько раз по двумерному массиву и соответственно удалив пройденные ячейки и т.д. Но не хватает пока практики сразу сделать вывод, я уже замучался с этими массивами... эх... учиться мне еще и учиться деревья сажать
В общем, вернулся опять к дереву, как вытащить пути - разобрался, но никак не получается без лишних массивов, опять их приходится разбивать, кклеить и т.д. Если кто свободен и лучше разбирается в "деревьях, гляньте, пожалуйста, где что изменить, а то уже мозг закипел... С меня пивко ;) (сайт по стихам никак не восстановлю, копеек особо нет, поэтому "спасибо" очень скромное ).
Если вконце распечатать массив $pcat, то видно, что пути нормальные (сейчас просто иды вывел для наглядности), а вот с простой переменной $pp ну прям беда
Вот массив (дерево) в php для инклюда, если требуется:
У меня была похожая проблемка - не обновлялись ячейки в БД; я ее нашел, когда включил показ ошибок, может, пригодится
Я указал в БД в ячейке вставить цифры (там можно текст вставить и т.д.), а после вычислений скриптом у меня почему-то цифры превращались в текст, т.е.:
вместо $a = 5;
я получал $a = '5';
Поэтому пришлось ставить кавычки перед вводом в БД и тогда записывалось, либо приводить к цифре текст.
Дело давно было, сейчас точно не вспомню как и что делал, но, думаю, смысл понятен... Вдруг кому еще пригодится
А стоп, так так дерево уже есть и нужно просто его обойти и вывести путь от корня до низу?
Не совсем верно, иначе бы это упростило задачу , пример моей функции вывода дерева можно под спойлером посмотреть. Мне нужно не только пройтись от верхнего уровня до нижнего, но и вернуться опять к верхнему в дереве... Нужно учесть $level = 0; затем его плюсовать или минусовать - вроде как всё понятно, но вверх его поднимаю без проблем, а спустить обратно (к главным категориям) не получается - категории замещают друг друга. Наделал кучу разных вариантов и не работает, как должно, вот и приходится пока не по дереву бегать, а еще доп. массивы для выборки путей, чтоб потом в дереве реплейсом поменять имя категории на готовый путь.
Но пришла идея не создавать еще один мега-массив для обработки путей, а ... Сейчас думаю так попробоввать: Если опускаемся на уровень вниз (каунтом уровни не получится подсчитать - подсчитывается только то, что на уровень ниже, а это не то), то создаём массив путей, типа:
# В самом начале: $path[0] = "$domain/";
# Затем в дереве при переходе в глубь...
$lvl++;
$path[$lvl] = $path[$lvl-1].'/';
...
и так по нарастающей от уровня...
+ текущая директория = полный путь.
Примерчик чертовски простенький и интересненький... сейчас попробую по этой схемке покрутить массив, спасибо. В принципе, если бегать несколько раз по двумерному массиву, то даже и дерево тогда не нужно, зря строил, а сразу вытащить всё одним махом получится Я поначалу так и начал, но столкнулся с проблемкой как мне массив перестроить после удаления пустых элементов ансетом, чтоб сотню категорий постоянно не пересчитывать, а: 100, 99, 98 ... (иначе коунт($арр) их тоже считает) - не смог поначалу и решил, что проще будет еще мега-массив сделать, но так только еще больше нагромоздил скриптов
Возьму-ка я денек еще, через день-два отпишусь как и что сделал, пока нужно еще самому попробовать покрутить это, теперь больше вник в суть деревьев. Эх, век живи - век учись
Цитата:
Но как я понял, ты сначала это дерево сформировал из простого массива pid-id-info? Этого не обязательно делать.
Верно, сначала массив взял типа
$cats[$id][$pid][$link];
, отсортировал, почистил и т.д., а из него уже получил дерево. При этом $info (т.е. $link) = "<ul><li><img scr="icon"><a href="/catname/">text</a></li></ul>" вот в таком приметиве выглядит, он в разы больше, а это для примера.
затем уже в процессе прегами и реплейсами меняю href на полный путь.
Спасибо, вроде понятней стало, разобрался, теперь нужно попробовать вживую наклепать.
У меня такая же проблема, как и у Фантика, он тоже отдельно получает путь к категории и саму категорию (имя и расположение, тем более формируя целую кучу запросов и массивов, что значительно скажется на каталоге в 50-100 катов/подкатов с очень высокой посещалкой...), я же пытаюсь без всяких запросов в БД и лишней проходкой по массивам взять сразу всё, но не выходит, поэтому я сначала получаю один массив, из которого делаю выборку путей, потом второй - дерево, из самого дерева получаю саму категорию (расположение) - это не рационально: создавать несколько n-вложенных массивов и с каждым в отдельности работать, чтоб потом получить еще один массив - обработанное готовое дерево с путями к категориям и их расположением.
Вроде как смысл понимаю, но логику как всё разом забрать и уменьшить код со ста строчек до 10 - никак не пойму... опять всё возвращаюсь к тому, что приходится создавать и обрабатывать несколько массивов, но хоть без лишних запросов в БД (2 основных как минимум - пути и структуру, т.е. иерархию - расположение в дереве).
Joo, извините, не в обиду будет сказано и никак не в придирку... Просто смотрите, если мне писать класс, то ведь он же должен состоять из каких функций, так? Вот те функции, которые я инклюдом получаю из другого файла, я точно также получу их же и из класса, но только с лишним гемороем: мне проще функцию написать, чем сидеть с классом разбираться, который из этой же функции и будет состоять... То есть масло маслянное с перцем и горщицей
Phantik, спасибо за пример, но реализация очень корявая и хуже (? - на мой взгляд, извиняюсь), чем то, что я сделал по другому примерчику (позаимствовал идею у одного блогера и 5 его строчек превратил в сто , теперь занимаюсь обратным процессом).
Champion, спасибо за ссыль, курю... Пока ничего путного не встретил, но есть там парочка ссылок на деревья, сейчас за кофейком выпью их, может, там примерчики что мне нужны...
Ребята, спасибо за помощь.
Если кому интересно, то вот так я пока это хозяйство за сегодня реализовал (сначала пути вытащил, потом само дерево распечатал, эх, совместить и упростить код никак пока не выходит, нужен какой-то примерчик хоть бы на пальцах, чтоб логику объединения функций понять):
Это очень просто реализуется на классах, у вас сразу отпадет ограничение по уровню вложенности и обход дерева примет элементарный вид.
Зачем мне классы для построения дерева, если я всё написал в несколько строчек и получил чистое дерево с нужными мне элементами? (просто форматирование потерялось здесь и ненаглядно выводится массив)
Другое дело - не знаю как написать простую функцию для одновременной распечатки самого дерева и выборки путей категорий/подкатегорий... Пришлось клепать мега-функцию, вернее даже две: распечатка самого дерева и выборка (жестко завязанная по вложенности) путей категорий/подкатегорий, простенький примерчик для наглядности который привел выше.
Если знаете как можно всё объединить в кучу для минимизации (оптимизации?) кода и без искусственных ограничений вложенности, был бы очень благодарен, а то уже мозг просто кипит, скоро взорвусь
Мне вот тоже интересно, что значит на ФТП? Вы имеете ввиду, на накопителе сервера, или все таки использую ФТП? Я бы Вам посоветовал выражаться более корректно, тогда как Вы говорите, на ФТП, люди подразумеваю сохранение данных через протокол передачи файлов (ФТП), со всем вытекающим.
Я же уточнил с примером - "а можно на ФТП (на винте сервера)"
П.С. вы, наверно, уже спите а у нас уже петухи пропели... рассвет... скоро лягу на часок.
Блин, капец, 2 дня убил (хотя дерево строил... м... даже сказать стыдно сколько дней ) и только что осенило, решил поделиться, так как в сети никаких примеров не нашел, может, кому пригодится:
Ет я регистрацию на сайте создаю,и хочу капчу передать обработчику,ее нужно только сессиями передавать?
Конечно, капчу передают с сессией, а иначе смысл капчи ? Ну просто тогда напишите текст: "нажмите кнопку номер 3 из 5" и всё
А если просто переменную передавать в разные страницы, то создайте файл config.php, который потом можно инклюдом везде воткнуть. Или я чего-то не так понял?
Ну как при чем? Кеш можно в БД как временные таблицы создать, можно в ОЗУ как буфер, а можно на ФТП (на винте сервера). А где по вашему кеш должен храниться - где-то там в интернете, что ли?
---
П.С. Страницы обычно не кешируют, кешируют отдельные блоки страницы во временной директории (папке) временного файла, который имеет определенное время жизни. Ну, например, можно на сутки или на час закешировать вывод блока Категорий сайта, чтоб их постоянно из базы не дергать и не обсчитывать логику, не обрабатывать массивы и т.д., а просто выводить готовый блок html, обновляя его раз в сутки, что значительно уменьшает нагрузку на сервер.
Капец, для кеша уже и целые классы пишут, скоро, наверно, CMS запустят
Поначалу вам буфер нужен был, теперь оказалось, что простой кеш на ФТП. А чем вас мой вариант не устроил? Всего несколько строк и наверняка работает куда быстрей, чем сей класс, я уже полгода так кеши пишу - всё отлично работает даже при очень высокой посещалке.
Пока я тут комментарий клепал (хотел на мысль натолкнуть), меня уже опередили и дали хороший ответ Вам тогда следует (?) написать в другой ветке? Есть веточка "напишите за меня, пожалуйста". Здесь же всё-таки обсуждают идеи и сам подход больше ;)
Далее есть несколько различных вариантов парсинга этих переменных из строки - зависит от вашей конкретной ситуации как и чем парсить... Можно просто разбить експлодом по знаку, например, "=" и получить значение из строки, можно спец. функциями, типа parse_url или подобными (их 2 или 3 точно, но по памяти так не скажу, давно клепал).
Я когда-то не знал как парсить, делал что-то типа этого: