|
|
|
| Есть текстовый файл с меню. Первая и вторая колонка это категории, третяя - субкатегории разделенные "#". Пример:
1|Category_1|test1|
2|Category_2|test1#test2#test3|
3|Category_3|test1#test2#test3#test4|
4|Category_4|test1|
5|Category_5|test1|
При помощи скрипта (код ниже) должно бы выводить вот так:
1=Category_1
2=Category_2
3=Category_3
4=Category_4
5=Category_5
Category - Category_1 = test1
Category - Category_2 = test1
Category - Category_2 = test2
Category - Category_2 = test3
Category - Category_3 = test1
Category - Category_3 = test2
Category - Category_3 = test3
Category - Category_3 = test4
Category - Category_4 = test1
Category - Category_5 = test1
но непонятно почему если число субкатегорий в последубющей категории меньше чем в предыдущей, создает то же число субкатегорий, а за неимением реальных добаваляет их из предыдущей.
Вот скрипт:
$datafile="menu.txt";
$file=file("$datafile");
$total=count($file);
for ($i=0; $i<$total; $i++)
{
$element=explode("|", $file[$i]);
$category[$i]="$element[0]=$element[1]";
$sub_category=explode("#", $element[2]);
$sub_total=count($sub_category);
$ii=0;
do
{
$sub_list[$ii]="Category - $element[1] = $sub_category[$ii]";
$ii++;
} while ($ii<$sub_total);
$sub_for_this_category[$i]=implode("<br>", $sub_list);
}
$category_list=implode("<br>", $category);
$subcategory_list=implode("<br><br>", $sub_for_this_category);
print "<hr>$category_list<hr>$subcategory_list"; exit;
|
Помогие пожалуйста. | |
|
|
|
|
|
|
|
для: krokodil
(02.08.2010 в 03:44)
| | А почему в файле, у вас доступа к базе нет? | |
|
|
|
|
|
|
|
для: sim5
(02.08.2010 в 04:29)
| | Важное уточнение: мне не просто их надо вывести на экран, а записать в одтельный файл для последующей работы java скрипта. Поэтому мне нужна именно такая форма скрипта. | |
|
|
|
|
|
|
|
для: krokodil
(02.08.2010 в 07:07)
| | Вы не оответили на вопрос о базе данных. Если у вас она используется, то получать из нее данные категорий для меню и записывать в таком виде, ну это просто ужас. Да и меню, все таки должно выглядеть так:
Раздел 1
Подраздел 1
Документ 1.1
Раздел 2
Подраздел 2
Документ 2.1
Документ 2.2
Документ 2.3
....
и т.д.
|
И это, если меню раскрыто. Вы не считаете, что ваше меню непонятное?
У вас не ошибка, а вы не верно формируете свой массив, потому у вас - как просили так и получили. Собственно и исходное, из которого вы формируте массив, крайне в неудачном представлении. Формировать меню на странице можно без участия JavaScript, им вы можете управлять меню, типа раскрывать/сворачивать разделы, то есть передавать некий массив описывающий элементы меню для JS-сценария нет необходимости, все это может делать РНР. Если же по тем или иным причинам вам нужно передать это в JS сценарий, то это не .тхт файл должен быть (хотя расширение роли не играет), а JS код, более точнее выражаясь, этот файл должен описывать JS-объект, типа:
var menu = {'cat1':[doc1],'cat2':[doc1,doc2]};
Вот тогда сценарию будет легче. | |
|
|
|
|
|
|
|
для: sim5
(02.08.2010 в 07:38)
| | Все таки вы меня не поняли.
Есть скерипт php с помощью которого создается меню. Записываются данные в текстовый файл который и выгладит как указано выше. При добавлении новости работает java скрипт который при выборе определенной категории подставляет нужные субкатегории. Естественно что запись будет идти в js файл и совершенно в другом виде. Суть проблемы в том, что при объеденении массива после цикла for и do вместо должного (как показано на верху) выводит так:
Category - Category_1 = test1
Category - Category_2 = test1
Category - Category_2 = test2
Category - Category_2 = test3
Category - Category_3 = test1
Category - Category_3 = test2
Category - Category_3 = test3
Category - Category_3 = test4
Category - Category_4 = test1
Category - Category_3 = test2 !
Category - Category_3 = test3 !
Category - Category_3 = test4 !
Category - Category_5 = test1
Category - Category_3 = test2 !
Category - Category_3 = test3 !
Category - Category_3 = test4 !
Строки которых не должно быть я отметил знаком "!". Почему они появляются? Почему если в категории 3 было 4 пунтка субменю, а в последующих только по одному, оно накидывает их из предыдущего. | |
|
|
|
|
|
|
|
для: krokodil
(02.08.2010 в 09:31)
| | Вот то, чего вы не желаете видеть в своем массиве, я и без ! понимаю. Но до сих пор остается непонятным:
1. От куда беруться исходные данные для вашего меню?
2. Какую структуру имет ваше меню?
3. Если меню, это массив в основе своей (что логично при вложениях), то почему такая странная структура у файла хранящего его элементы?
4. Зачем вообще нужен этот промежуточный файл?
Есть масса "человеческих" меню с уравлением на JS, где при выборе категории раскрываются (а не подставляются) ее подкатегории. А вот добавлением новостей JavaScript не занимается, не под силам ему это, единственное, что он может, это запросить/подключить готовые данные.
Ваш список меню даже отдаленно не напоминает, потому вы уж лучше опишите словами что нужно сделать, почему, и как. | |
|
|
|
|
|
|
|
для: sim5
(02.08.2010 в 15:31)
| | Исходные данные беруться из $datafile="menu.txt"; в самом верху скрипта. Из него нужно составить правильный js файл для последующей работы.
Главный вопрос в том: правильно ли я объединяю данные в массив после циклов for и do? что то там не так. | |
|
|
|
|
|
|
|
для: krokodil
(02.08.2010 в 22:35)
| | Огромное спасибо за попытку помочь, но я уже сам разобрался! | |
|
|
|
|
|
|
|
для: krokodil
(02.08.2010 в 22:35)
| | Нет не правильно. У вас даже текстовый файл исходный имеет лишнее, что будет приводить к появлению пустных элементов массива. А вообще, это бардак полный. | |
|
|
|