PDA

Показать полную графическую версию : Есть проблема с массивом и meta-тегами (PHP)


yager
12-07-2006, 12:33
Всем привет.

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

Задача такая.

Сайт - on-line версия печатного издания (газета)
Требуется сформировать рубрики, такие как политика, экономика, и т.д.
На сервере все разделено по каталогам, имена которых соответствуют номерам газеты, например (1,2,3 и т.д.)
В каждом из этих номеров есть каталоги "stats" и "block", соответствующие статьям и блоку новостей.
В этих каталогах находятся файлы со статьями и новостями, в мета-тэгах которых указывается рубрика, заголовок, автор и т.д.

Предположим, что юзер, находясь на главной странице, решил посмотреть рубрику "Политика", он кликает на ссылку политика, и дальше уже работает скрипт.


Есть такой кусок кода


1. for($i=0; $i<=sizeof($dir)-1; $i++){ // $dir - это массив содержащий в своих элементах все номера издания
2.
3. $hdl_st=opendir("nums"."/"."$dir[$i]"."/stats");
4. while ($stat_dir=readdir($hdl_st)){
5. if (($stat_dir!=".") && ($stat_dir!="..")) $stat_arr[]=$stat_dir; // получили массив, в элементах которого статьи
6. }
7. closedir($hdl_st);
8. rsort($stat_arr);
9. foreach($stat_arr as $val_st){ // ...а теперь у каждой статьи
10. $meta_st=get_meta_tags("nums/"."$dir[$i]"."/stats/"."$val_st"); // берем мета-тэги
11. $rubr=$meta_st[rubr_id];
12. if ($rubr==$rubrika){ // сравниваем мета-тэг в статье с рубрикой, полученной при попадании на страницу из главной
13. echo "Номер газеты - $dir[$i]; Рубрика - $meta_st[rubr_name]; Тип - статья; Заголовок - $meta_st[zagol];<br>";
14. echo "<a href=st.php?paper_num=$dir[$i]&stat_num=$val_st>Перейти</a><br><br>";
15. }
16. }
17.
18. $hdl_bl=opendir("nums/"."$dir[$i]"."/block");
19.
20.
21. while ($block_dir=readdir($hdl_bl)){
22. if (($block_dir!=".") && ($block_dir!="..")) $block_arr[]=$block_dir; // получили массив,
// в элементах которого файлы с новостями, далее по аналогии со статьями
23. }
24. closedir($hdl_bl);
25. rsort($block_arr);
26. foreach($block_arr as $val_bl){
27. $meta_bl=get_meta_tags("nums/"."$dir[$i]"."/block/"."$val_bl");
28. if ($meta_bl[rubr_id]==$rubrika){
29. echo "Номер газеты - $dir[$i]; Рубрика - $meta_bl[rubr_name]; Тип - Блок новостей; Заголовок - $meta_bl[zagol];<br>";
30. echo "<a href=bl.php?paper_num=$dir[$i]&block_num=$val_bl>Перейти</a><br><br>";
31. }
32. }
33. }


В принципе это работает, что странно, так как вместе с результатами выдается куча ошибок, вернее одна, но по циклу..., и еще одна - по результату.

Во-первых, при запуске скрипта выдается такая ошибка
<b>Notice: Use of undefined constant rubr_id - assumed 'rubr_id' in s:\home\server\www\rubr.php on line 24</b>
имеются ввиду строки 11 и 28 вышеприведенного скрипта <b>(if ($meta_bl[rubr_id]==$rubrika){)</b>

Во-вторых, вывод на страницу происходит таким макаром



Номер газеты - 58; Рубрика - Семья и дети; Тип - статья; Заголовок - Семья бывает разная; Перейти
Номер газеты - 58; Рубрика - Семья и дети; Тип - статья; Заголовок - Напиши мне, мама!; Перейти

Номер газеты - 57; Рубрика - Семья и дети; Тип - статья; Заголовок - Детские сердца; Перейти
Номер газеты - 57; Рубрика - Семья и дети; Тип - статья; Заголовок - Детские сердца; Перейти
Номер газеты - 57; Рубрика - Семья и дети; Тип - статья; Заголовок - Обреченные!; Перейти
Номер газеты - 57; Рубрика - Семья и дети; Тип - статья; Заголовок - Обреченные!; Перейти


То есть, я так понимаю, мне нужно обнулить массивы $stat_arr и $block_arr, к примеру во второй строчке, но, честно говоря, я не знаю, как это сделать.

PS. Простите за такой развернутый эпос...

strejiok
12-07-2006, 14:14
1) Во-первых, при запуске скрипта выдается такая ошибка <b>Notice: Use of undefined constant rubr_id - assumed 'rubr_id' in s:\home\server\www\rubr.php on line 24</b> имеются ввиду строки 11 и 28 вышеприведенного скрипта <b>(if ($meta_bl[rubr_id]==$rubrika){)</b>
$rubr_id

2) unset($stat_arr); unset($block_arr);



Если я Вас правильно понял.

З.Ы. Сорри, на код не смотрел :)

yager
12-07-2006, 14:24
$rubr_id

2) unset($stat_arr); unset($block_arr);

Не-а, к сожалению. Эти переменные всегда определены.

strejiok
12-07-2006, 22:03
Notice: Use of undefined constant rubr_id - assumed 'rubr_id' in s:\home\server\www\rubr.php on line 24

Если перевести ЭТО, что получим? Возможно стоит добавить перед именем переменной знак "$" ?

if ($meta_bl[rubr_id]==$rubrika){

P.S. Может я все же чего то не понимаю :)

Igor_I
12-07-2006, 22:32
Не-а, к сожалению. Эти переменные всегда определены.
Какие переменные?
В данном случае ты их просто обнуляешь, а спустя строчку уже присваиваешь ей значение.
http://php.rinet.ru/manual/ru/language.constants.php

Различия между константами и переменными:
У констант нет приставки в виде знака доллара ($);
$rubr=$meta_st[rubr_id];
Так оно и есть у тебя, но саму константу ты же не определил.

E-mail
12-07-2006, 23:24
ребят, кавычки одинарные в квадратных скобках поставте и не будет предупреждений..

strejiok
13-07-2006, 00:29
E-mail
Не наш метод ;)

yager
Может стоило еще немного кода дописать.. мало ли. может "выше" еще какие нибудь чудеса творятся?

yager
13-07-2006, 09:51
E-mail
Ты был прав. Я вера дома добил этот код. Точнее - во второй строчке ОПРЕДЕЛИЛ массив, а не "обнулил", как я говорил в первом посте, а в строчках 11 и 28 поставил кавычки. Все!

ЗЫ Привык, однако, я к типизированным языкам.

ЗЗЫ. Всем спасибо, "проблема" решена!

ЗЗЫЫ.
Igor_I. "rubr_id" - это не переменная и не константа, это тэг в файле со статьей, а по этому - всегда определен.

Igor_I
13-07-2006, 19:43
yagerIgor_I. "rubr_id" - это не переменная и не константа, это тэг в файле со статьей, а по этому - всегда определен.
Ну ты знаешь, это тебе решать :) что это - константа, переменная или элемент массива. Я показал, что у тебя получилось ...
А каким языком ты владеешь?
И в чем же разница, между обнулением и определением массива?

strejiok
13-07-2006, 21:24
Igor_I
:) об этом история умалчивает...


yager
приходите еще :)




© OSzone.net 2001-2012