Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Есть проблема с массивом и meta-тегами (PHP) (http://forum.oszone.net/showthread.php?t=68421)

yager 12-07-2006 12:33 460630

Есть проблема с массивом и meta-тегами (PHP)
 
Всем привет.

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

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

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

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


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

PHP код:

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 460676

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 460686

Цитата:

$rubr_id

2) unset($stat_arr); unset($block_arr);
Не-а, к сожалению. Эти переменные всегда определены.

strejiok 12-07-2006 22:03 460860

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 460875

Цитата:

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

Цитата:

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

E-mail 12-07-2006 23:24 460892

ребят, кавычки одинарные в квадратных скобках поставте и не будет предупреждений..

strejiok 13-07-2006 00:29 460925


E-mail
Не наш метод ;)


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

yager 13-07-2006 09:51 460997

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

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

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

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

Igor_I 13-07-2006 19:43 461169

yager
Цитата:

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

strejiok 13-07-2006 21:24 461197

Igor_I
:) об этом история умалчивает...


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


Время: 04:50.

Время: 04:50.
© OSzone.net 2001-