![]() |
Прикрутил скрипт новостей. Все работает. Но в начале выдает ошибку. *
Ошибка: Цитата:
Код:
<? Код:
<!-- menu building --> Код:
<?include"news.php";?> [s]Исправлено: Prisoner, 2:40 21-09-2004[/s] |
Rudy
естественно... ошибка ровно в том что и написано... сервер сам все конкретно описал!!! |
news.php судя по всему использует сессии, особенностью которых является полное первенство в выводе скрипта (это заголовочная информация, не путать с <head>). В Вашем же случае ДО сессии был произведен вывод кода странички (отрисовка меню). Таким образом рекомендую поглядеть можно ли обойтись без сессий и если нет поглядеть можно ли перенести начало сессии (session_start()) в начало скрипта так, чтобы они начинались до вывода какого-либо содержимого.
|
1. session_start()) в начале скрипта news.php
а главная страница новостей index.php подключает скрипт news.php <?include"news.php";?> 2. сессий нужны для редактирования новостей, которое производится не из администраторского или модераторского раздела, а прямо с главной странице новостей! Для этого после процедуры авторизации через login.php возвращаясь на главную страницу новостей становятся доступны новые пункты: edit (редактировать) и del (удалить); if(session_is_registered("adm")) $ent1="<font size=1> | <a href=admin.php?do=answer&id=$n&random=$random&back=$id>answer</a> <a href=admin.php?do=deletecomm&id=$n&random=$random&back=$id>del</a></font>"; if(session_is_registered("mod")) $ent1="<font size=1> | <a href=moder.php?do=answer&id=$n&random=$random&back=$id>answer</a> <a href=moder.php?do=deletecomm&id=$n&random=$random&back=$id>del</a></font>"; |
Это понятно, но смею повторно обратить внимание на ваш случай: вывод кода странички ДО создания сессии. Регистрация последних должна производиться ДО любого вывода тегов броузеру клиента, а не в начале включаемого скрипта.
|
Сделал отдельно страницу админа без меню и.т.д. - работает.
[s]Исправлено: Prisoner, 2:40 23-09-2004[/s] |
Rudy, если бы поглядели рекомендации в моем первом посте по этому вопросу, то вы бы могли не убирать меню... впрочем это тоже вариант.
|
Попробую сделать файл с session_start() и потом иклудить в нужном месте.
Теперь еще один нюансик При удалении новости удаляется img файл, но в разных новостях использутся одинаковые *img файлы, где отключить удаление Код:
if($do==="deletenews" and session_is_registered("adm")) |
Удаление происходит оператором unlink (собачка означает подавление вывода ошибок, если они возникают). Вероятнее всего картинки удаляются вторым таким оператором вашего кода. Я не знаю смысловую нагрузку файла base.dat - возможно там тоже что-то связанное с изображениями.
|
Закрыл оператор @unlink("img/$Fn"), нормально.
В файле base.dat собственно база новостей в текстовом формате. Посоветуй, как сделать. Хочу переписать news.php чтобы сделать анонс новостей. news.php выводит дату,заголовок, img файл и текст. Мне нужно чтобы выводился текс ($msg) около 200 символов, а далее я сделаю ссылку на новость. Код:
print" [s]Исправлено: Prisoner, 2:24 25-09-2004[/s] |
Есть маленькое уточнение - ограничивать новость посимвольно не есть хорошо - возможно отрезание на каком-либо слове, поэтому лучше резать по словам, выводя, скажем, лишь некоторое их количество. Это частая задача и ее может решить такая функция (писалась мной давно и при некоторых малых изменениях работает нормально):
Код:
$Year = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'); |
Это слишком для моего простенького скрипта,
- проверяется необходимость вывода в сокращенном виде, - используется SQL - размер $NewsBody оговорен где-то ранее. У меня вывод новости: ... <td width=\"99%\"><font size=2>$msg</font> как бы ее тупо резануть после 200 символа или ограничить в рамках ячейки таблицы |
Лады... тупо режем (но по словам :), скажем 50 слов):
Код:
$msg = implode(' ', array_slice(explode(' ', $msg), 0, 50)); |
Сделал так
if(strlen($msg)>50) $msg = implode(' ', array_slice(explode(' ', $msg), 0, 50)); Ок! |
Ок только на первый взгляд... strlen считает символы, а из-за применения explode(' ', $msg) мы оперируем словами. В результате переводя на человеческий язык ваш код получаем: если длина строки больше 50ти символов, то оставить в строке только 50 слов. А что если слова будут больше одного символа (такое ведь иногда встречается? :)). В общем корректнее будет так:
Код:
$msgwords = explode(' ', $msg); |
Как правильно сделать:
// если болше 50 слов, краткое содежание+ссылка Код:
$msgwords = explode(' ', $msg); |
Код:
$msgwords = explode(' ', $msg); |
Новости выводятся на страницу с последней и вниз, а как вывести наоборот.
Цитата:
|
Трудночитаемый, однако, код... будем думать: новости скорее всего добавляются в конец файла, таким образом если выдергивать часть новостей (для вывода на странице х), то для вывода в порядке старые->новые нужно переворачивать массив считанных данных (что и делается в коде функцией array_reverse) и если попробывать этого не делать, то можно, вероятно, достичь того, чего вы хотите.
|
Время: 22:48. |
Время: 22:48.
© OSzone.net 2001-