Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - Гаррилл

Страницы: [1] 2
1
Вот и я сделал template engine. Начинал не с нуля, а с исходников от phpbb.
Переделал компилировщик (теперь он генерит нормальный php), добавил такую функциональность, как , .
С динамическими блоками и обычными вариаблами работает, как раньше с ИФами и инклудами так:



main_tpl
.tpl
<!-- IF isset({var:IS_ADMIN}) -->
	
<!-- INCLUDE 
SOME_ADMIN_BOX -->
<!-- ELSEIF 
some_php_function({var:ANY_VARIABLE}) < .... {var:TRALI_VALIetc PHP -->
	
<!-- 
BEGIN block1 -->
	
	
<!-- IF isset({var:
block1.VALUE}) -->
	
	
//всякий хипер текст маркап лэнгвич
	
	
<!-- ENDIF -->
	
<!-- 
END block1 -->
<!-- ENDIF -->


include.
tpl
//всякий хипер текст маркап лэнгвич


php.php
<?php
$template 
= new Template($default_skin_dir$default_lang_dir);

$template->set_filenames(array(\'MAIN_TPL\' => \'main_tpl\'));

if(авторизован, как админ)
{
	
$template->assign_vars(array(\'IS_ADMIN\' => TRUE);

	
$template->set_filenames(array(\'SOME_ADMIN_BOX_HANDLE\' => \'blocks/include\'));

	
$template->assign_include(\'SOME_ADMIN_BOX\', \'SOME_ADMIN_BOX_HANDLE\', 1);
}
else if(другие условия)
{
	
$template->assign_block_vars(\'block1\', array(\'VALUE\' => \'какой-нибудь валуй\'));
}

$template->pparse(\'MAIN_TPL\');
?>




Т.е. в ИФах можно использовать пхп-код и значения {var:IS_ADMIN} или в блоках {var:block1.VALUE} для различных
condititons. Они задаются тем же assign_vars, но не добавляется
Теперь о технологии парсинга. Тот же eval или require_once при кэшировании.
При использовании инфа берётся из нескольких tpl, они все становятся одним uncompiled_code
с помощью str_replace-ов. Притом конфликтов с вложенностью нет, т.к.
assign_include(\'   [str:some variable in tpls]\', \'    [str:handle of file content]\', \'    [int: level of replacing]\');
Т.е. level того шаблона в котором меньше, чем у того, в котором контент для .
В общем создаётся шаблон, потом один раз прогоняется compile-ом и eval-ится.

С кэшированием такого нет. так и инклудит файлы. Т.к. у разных страниц сайта мошгут быть разные подключения. Зашивать железно или
перекэшировать каждый раз нехорошо. А с несколькими require_once нормально.
Ещё фича этих инклудов:

$template
->assign_include(\'SOME_ADMIN_BOX\', \'SOME_ADMIN_BOX_HANDLE\', 1);
$template->assign_include(\'SOME_ADMIN_BOX\', \'SOME_ADMIN_BOX_HANDLE_2\', 1);

будет инклудить в один 2 файла. Мне, например, это удобно для создания side-boxов (меню, ниже опрос, ниже баннер).

На локалке работает гораздо быстрее, чем раньше.
Есть ли у вас пожелания/замечания/критика? Я нормальный :)) Орать, что обиделся не буду :))
Кстати, кодил это где-то неделю, а продумывал где-то ... две.

http://kirill-gar.fromru.com/template.zip

2
Я ещё не опытный, с большими объёмами данных дела не имел. Есть 2 варианта. А я чешу репу. Вся работа с СУБД.
Вариант первый:
Есть таблицs users и users_groups. Пользователь может состоять в нескольких группах. А инфа, в каких юзер группах, хранится в таблице users в поле varchar вида 1,2,3,4,5,6,7.
Есть же второй вариант:
Заводить ещё одну таблицу user_group_info с полями user_id, group_id.
Удобнее работать со вторым вариантом, но быстрее ли? Ведь инфа о том, в каких юзер группах мне нужна будет абсолютно на каждой странице сайта. Что, если у меня 1 000 000 зарегистрированных пользователей и 1000 групп. А пользователь в среднем состоит в 5 группах. Каждый раз селектить из 5 000 000 ???

Хочу услышать советы опытных программеров, как грамотнее составить структуру :beer:

3
Короче, помимо того, что умеет phpbb можно будет создавать группы, отличающиеся по двум критериям: уровневая, обычная. С ними работа такая же как и обычно, но в уровневые группы переходят те юзеры, которые этого заслуживают. Допустим, чтобы попасть в группу "Панки", то надо набрать 100 очков так называемых. Как ранги. НО, эти очки разными способами зарабатываются, например, юзер оставил хороший комментарий, тогда ему админ начислил 1 очко, написал статью - 2 или члены других групп повышают в должности юзера. Потом при активации всяких фич админ выбирает галочками какие группы видят её: анонимы (это никто, но у них своя группировка), и остальной список групп юзеров. Каждую группу тоже можно конфигурировать как угодно. Зарегистрированный юзер никуда не денется, он по-любому будет в группе, в любой.
Если юзер состоит в нескольких группах, то тогда его права определяются по самой высокопоставленной группе. Рядом же будет и система оценок юзера. Оценивать смогут те, кто состоят в группе, которая полномочна оценивать. Нынешнюю систему рангов после этого можно будет выкинуть.
Как алгоритм? Что по-вашему должно/не должно здесь быть?

4
http://phpbbcms.sourceforge.net/010/forums/viewtopic.php?t=1&highlight=%F2%E5%F1%F2+test
Так. Английское слово подсвечивается, русское нет.
Чего-то не въеду я, почему на SF оно не пашет. Не пашет и Автоцензор. А на локали всё реплейсится нормально. Хотя поиск работает.
Кодировка муськи, чтоли виновата? Хм. Не знаю. Если надо, то могу привести код. Хотя он написан нормально.
Чего посоветуете делать?

5
Я пробовал так:
$content preg_replace(\'#([\\/]?.*?)>\\n#is\', "\\n", $content);
Всё из-за того, что ниже стоит ещё нужный
$content = \'\' . str_replace("\\n", "\\n
\\n", $content);

Думааю, поннятно зачем нижний реплейс, а вот верхний нужен для того, чтобы такие данные в базе как эти


 
   
   
   

сидели на месте.
Ведь неудобно неразделять строчки. А вот мне нужно реплейсить каждый закрывающий тэг ">" с "\\n" на ">".
Как организовать? #([\\/]?.*?)>\\n ...?
6
Вот взбрело мне сделать урлы в phpBB2 вида Forums/viewforum/3 , а не Forums/viewforum.php?f=3 .  
Данные я оттуда выдирал так:
$url_array = explode("/",$REQUEST_URI);
и
далее $forum_id = $url_array[3];
...
Для того чтобы не было проблем с путями я в extension.inc прописал
define("SITE_PATH","c:/myserver/root/new_portal/www");
для инклудов и
define("SITE_URL", "http://new_portal.rus");
для графики.
Сам форум я разбил на модули. Всё я прописал правильно.
Теперь у меня в начале каждого файла примерно такая запись:
include("../../extension.inc");
include(SITE_PATH.\'/common.\'.$phpEx);
Тама все инклудовые файлы на 2 уровня ниже.
Всё вроде хорошо пашет, но стоит мне открыть форум, где 50 топиков или мемберлист, где 50 юзеров на одной странице, то начинаются жуткие тормоза:
разъежаются таблицы, тэги превращаются в текст ака вот это "
    Из-за чего такая лажа? Появилась после дописывания абсолютных путей, или может из-за того что я дефины в *.inc прописал, а может из-за особенностей темплейтов?
Как энто лечить?
Не хотел просто mod_rewrite ставить.
7
PHP / Помогите трансформировать дату
« : 24 Июня 2002, 21:35:57 »
Я переделываю нюк. Значит, стоит у меня такая задача:
Есть 300 новостей в таблице MySQL nuke_stories, а там у каждой время постинга такое: time = 2002-06-24 20:36:27, где тип поля datetime. Мне же надо иметь дату time = 1024936587, с типом поля int(11). Вот как я продумал свои действия:

Код:

<? 
 
mysql_connect($host$username$password); 
@
mysql_select_db($database); 
 
mysql_query("ALTER TABLE nuke_stories ADD times int(11) not null AFTER time"); 
 
$result mysql_query("select time from nuke_stories"); 
while(list(
$time) = mysql_fetch_row($result)) { 
 
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})"$time$datetime); 
 
//$datetime[4] - час 
//$datetime[5] - минута 
//$datetime[6] - секунда 
//$datetime[2] - месяц 
//$datetime[3] - день 
//$datetime[1] - год 
 
$newtime $datetime[6]+$datetime[5]*60+$datetime[4]*3600+$datetime[3]*86400+$datetime[2]*2592000+32*31104000
 
    
mysql_query("update nuke_stories set times=\'$newtime\' where time=\'$time\'"); 

 
?> 


А потом удалить поле time и переименовать times в time?
Что-то не выходит.

8
Вот эта функция setlocale ("LC_TIME", "$locale"); определяет локальное время сервера, на котором стоит скрипт. А как определить локальное время браузера, который смотрит. Там $HTTP_* вроде бы, а дальше?

9
PHP / Посмотрите
« : 11 Февраля 2002, 23:56:33 »
Не видно ли на этом сайте ошибок скрипта, если видно, то какие?
http://www.our-chernomorets.km.ru/phpnuke/index.php

10
Sanitarium WebLoG / ХеХе, а эта тачка хороша!
« : 06 Февраля 2002, 22:05:41 »
:super:  Webscript - молодцы :beer:
Ща мне ещё KM поставят новый пёрл модуль и тогда будет вообще кайф :D

11
Sanitarium WebLoG / Чё за фигня с комментами.
« : 06 Февраля 2002, 18:38:06 »
За день я уже устал.
Короче такая фигня:
Вот мой санитариум http://our-chernomorets.km.ru/dailynews/1/news.html
Дальше читаю статью, жму коментарии, посылаю коментарии и сразу открывается http://www.our-chernomorets.km.ru/cgi-bin/dailynews/comments.cgi - а сдесь ошибка 500. Что за фигня?
А например http://www.our-chernomorets.km.ru/cgi-bin/dailynews/comments.cgi?id=5&cat_id=1 работает.
И самое странное комментарии приходят, я их модерирую, и они вылазят как надо.

12
Sanitarium WebLoG / Почему не работает upload
« : 06 Февраля 2002, 15:31:13 »
Установил сей скрипт - всё отлично. Скрипт - супер. В админ-центре нажимаю загрузить файл, а она собака - Internal serv. eror.
В чём дело.

13
Perl / Нужен скрипт новостей. Отблагодарю.
« : 04 Февраля 2002, 23:37:43 »
А для описания, какие новости надо.
Так вот
1. Заголовок
2. Краткое содержание ниже заголовка.
3. Нажимаешь кнопку подробнее и в окошке без адрессной строки открывается
окошко заданного размера, ну, к примеру 600х700. Т.е. ЯВАссылка.
4. Возможность закачки фотографий.
5. Это должно быть без знаний ХТМЛ, т.к. новости буду добавлять не я.
Такие новости я видел на сайте
http://news.sport-express.ru/online/rubr/rubr0001.shtml
Нужны именно такие новости, я то вижу их возможности, да и с дизайном у них
в порядке, видно же, что в stml вставляется news.txt. И в NewsPro таким и не
пахнет.
А как в благодарность,если хотите, пришлю исходник флэш-меню, которое стоит на моём
сайте http://www.our-chernomorets.km.ru/
Делал его сам, очень долго. Настраивается легко, куча эффектов, и вес -
14kb. Уже многим отдавал. Людям  нравилось.

14
Perl / Вопрос по NewsPro
« : 03 Февраля 2002, 00:20:05 »
Мне надо, чтобы был заголовок, дата там и всё такое. Но нужно, чтобы под заголовком было только начало новости, а при нажатии на кнопку подробнее в новом окне (по функции яваскрипт) открывалась вся новость, так же как на http://news.sport-express.ru/online/rubr/rubr0001.shtml. Что надо поправить или какой аддон установить?

15
Очень надо, а то туда ходить не будут.

Страницы: [1] 2