![]() |
Показаны 12 сообщений на этой странице |
Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- vBulletin & PHP Programming СОВЕТЫ (http://netadmin.ws/forum/showthread.php?threadid=4460)
vBulletin & PHP Programming СОВЕТЫ
Я уже неделю серьёзно подсел на vBulletin...
Возможно кому-нибудь пригодятся эти советы:
1. НИКОГДА не используйте $variable[something] для доступа к `array element`в ассоциативном массиве. Вместо этого используйте $variable['something']. Ð_азница в том, что первое выражение пытается получить несуществующее значение "something".
2. НИКОГДА не доверяйте `register_globals`, которые были отключены в PHP начиная с версии 4.2. Взамен используйте суперпеременные $_GET и $_POST. ..например вместо $page, используйте $_GET['page'].
ЗАКЛЮЧЕНИЕ: Забудте о `deprecated variables` (таких как $HTTP_POST_VARS), которые должны быть заменены на $_POST.
ПÐ_АВИЛО: Все глобальные переменные написаны ПÐ_ОПИСНЫМИ буквами и начинаются с символа _*****
Navin добавил 22-02-2003 в 15:29:42:
3. Чтобы постро просмотреть переменную, можно использовать <?=$variable?>
Внимание! Убедитесь, что ваш код будет работать даже если `short_open_tag` не включен (`Off`) в php.ini вашего сервера. Всегда лучше использовать <?php echo $variable; ?>
4. Когда посылаете запрос в MySQL только на одну строку (row), легче всего сделать так, чтобы переменные столбцов использовали list() и mysql_fetch_row().
<?
$result = mysql_query("SELECT name, email FROM table LIMIT 1");
list($name, $email) = mysql_fetch_row($result);
?>
if($a==1){
echo "1";
}
else{
echo "Not 1";
}
// А теперь всё что выше в одном выражении.
echo ($a==1)?"1":"Not 1";
осталось только учебник по php сюда запостить...
Интересные откровения
Первые два и заключение, пожалуй, главные и самые распространенные ошибки.
xm ... klasnie soveti ..znaesh Falcon ne vse po knigam ychatsia .... imeytsia lydi katori nenavidiat knigi a vot soveti im pomogayt ... thanks Navin za sovet if statmenta ... prigoditsia ..
__________________
..:<------nothing is real------>:..
Конечно.. в MANUALS это всё прописано, но нет ВÐ_ЕМЕНИ чтобы читать 1000 страниц.. кому-то, это даже не нужно, всё схватывает на лету... хотя, в таком случае, ошибки обеспечены..
Я пожму руку тому, кто выложит здесь СВОЙ полезный совет и, возможно, не даст сделать мне ошибку при написании скрипта..
__________________
--->> M y R S S . R U <<--- Stop trying to get Lucky.. Get informed!!
Navin, начал потихоньку разбираться в сриптах vBulletin'a.
В PHP я только начинаю.
Не мог бы объяснить, каким способом те скрипты выводят текст в броузер? Я так понимаю: сначала как-то текст записывается в буффер, а потом он освобождается, или как?
Я не нашел ни одной команды print или echo .
Просьба не ругаться за возможно глупый вопрос.
Olsufr,
Я всего лишь предположу, но скорее всего там всё построено на шаблонах. В форуме есть свой движок для шаблонов. Шаблоны - обычные хтмл-файлы, в которых ключевые значения (которые задаются скриптом) выделены особым образом. Например, так: {VALUE} или так - %VALUE% - это не суть важно.
В общем, схема такая: скрипт выполняет свою работу (берет информацию из базы, файлов, обрабатывает ее в соответствии с условиями). Затем происходит парсинг шаблонов - т.е. берется шаблон и соответствующие значения в нём (те самые {VALUE}) заменяются значениями из результата работы скрипта. Затем идёт элементарная выдача статичного хтмл-кода пользователю.
Вот.. примерно так. Вряд ли там разработчики изобрели велосипед 
Olsufr, невермайнд прав.. все эти темплиты хранятся в базе SQL на сервере... при установке vb они загружаются туда из файла vbulletin.style
__________________
--->> M y R S S . R U <<--- Stop trying to get Lucky.. Get informed!!
и выводятся при помощи echo функция dooutput называется если мне не изменят память.
__________________
Всегда есть решение.
Nevermind,
Navin,
polo,
спасибо за ответы.
Кажется понял, как собирается текст html-страницы и происходит вывод. 
Если я где-то ошибся, поправьте, плиз.
Template'ы собираются командами подобными этой:
eval("\$newposts = \"".gettemplate('forumhome_newposts')."\";");
Т.е. вызывается функция gettemplate() и результат ее работы (template) присваивается определенной переменной.
А в конце каждого php-скрипта пишется такая команда:
eval("dooutput(\"".gettemplate('forumhome')."\");");
В этой команде вызывается функция dooutput(), в которую и передается сделанная из разных template'ов html-страница форума.
В этой функции:
если !$showqueries == true ,
то html-страница с добавленными заголовками выводится с помощью команды echo
Далее посредством flush() освобождается буфер вывода.
если !$showqueries == false ,
то html-страница с добавленными заголовками присваивается переменной $output ,
на вывод дается только строка "\n<b>Page generated in $totaltime seconds with $query_count queries,\nspending $querytime doing MySQL queries and ".($totaltime-$querytime)." doing PHP things.</b></pre>"
Вызов flush()
Для какой цели предназначен второй вариант, когда !$showqueries == false и зачем html-страница присваивается переменной $output , если дальше она все-равно не выводится и больше нигде не используется ?
Какие надо задать переметры в строке запроса, чтобы !$showqueries стало бы false и я увидел бы информацию о сделанных запросах при формировании страницы ?
Насколько я понимаю, в PHP по умолчанию установлена буферизация вывода ? И значит, после использования команды echo (или print) надо принудительно освобождать буфер через flush() ?
Если по умолчанию нет буферизации вывода, то какая команда в скриптах vBulletin включает ее?
quote:а для чего это нужно, если не секрет ;-))
Какие надо задать переметры в строке запроса, чтобы !$showqueries стало бы false и я увидел бы информацию о сделанных запросах при формировании страницы ?
__________________
--->> M y R S S . R U <<--- Stop trying to get Lucky.. Get informed!!
Navin, для того, чтобы знать что за код у меня будет исполняться на сервере и каковы его возможности. И если в скриптах существуют какие-то недокументированные возможности, то я тем более хочу об этом знать. 
| Формат времени GMT. Текущее время 20:34. | Показаны 12 сообщений на этой странице |
Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.