Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: О движке VU: основные принципы.  (Прочитано 181492 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« : 07-01-2007 15:21 » 

Документация по существующему движку нат написана и не была, развитие остановилось и наш движек уже я уже более нигде не встречаю. Но мне нравится его основные достоинства - простота и легкость. Об этом и хочу рассказать.



Я сейчас снова взялся за его (VU) развитие. Попытка сделать что-то совершенно новое (ветка 3.0) заглохла да неимением времени, желания и поддержки (в одиночку все же сложно такие проекты толкать).

После недавнего обновления (обновлен был не только дизайн club.shelek.com, но и слегка подчищен код) я взял ветку 2.2 и оставив главный принцип работы переделал код кардинально. Опишу изменения в кратце:

1. Изменен интерфейс web-запроса: вместо множества файлов - один - index.php, а запрос передается параметрами. Это разные концепции и у каждой есть свои достоинства и недостатки.
2. Код в очередной раз подчищен (еще осталось чего изменять). Вместо множества ф-ий, выполняющих одну и туже работу над разными объектами, реализую тоже множество, но лишь выполняющее подготовку данных и вызов ф-ий, реализующих вывод - это должно упростить модификацию вывода для программиста.
3. Работа с отдельными объектами (новости, статьи, лента, файлы и т.п.) вынесена из ядра в отдельные файлы и классы. Эти классы наследуют и расширяют класс ядра, добавляя необходимый данному объекту функционал. Как пример, статьи могут храниться, управляться и подготавливаться к выводу одним объектом, или могут хранится как посты форума и импортироваться из его базы (как реализовано сейчас). Т.е. это пример подмены объекта: интерфейс тотже, а суть разная.
4. Сделана оптимизация: объекты хранят экспортируемые возможности в отдельных маленьких файлах, которые подключаются всегда, а сам код объектов импортируется динамически, строго по необходимости. Привычная аналогия: заголовочные файлы C/C++ и файлы с кодом.
5. Код управления объектами содержится в самих объектах, а не в отдельном модуле (эта часть в процессе разработки, но некоторые тесты уже сделаны).
6. Серьезно модифицирован принцип вставок (об этом ниже).

Сохранено и доработано, как особенность движка:

1. Система шаблонов: чистый HTML. В отличии от многих движков (взять тот же SMF), где дизайн и верстка внедрены в php-код. Это позволяет работать над оформлением не программистам, что очень важно в плане разделения труда и специализации.
2. Система вставок: в код шаблона вставляются специальные конструкции вида [!имя_вставки!]. По сути, это callback для ф-ий объектов. Это вполне безопасно, т.к. обрабатываются вставки только в шаблонах, а контроль доступа (при штатной работе и от ошибок проектирования и создания шаблонов) обеспечивается самими объектами.

На текущий момент я реализовал и протестировал пользовательсую часть и задумался над административной - это, как правило, самая интересная и сложная часть web проектов.
В принципе, старая админка подойдет к новому движку, т.к. структура БД не изменилась, а лишь исправлены лингвистические несуразности (title-tytle, descr-descript-description).
Так же пока не переделан код RSS-экспорта - руки не еще дошли.
Но админку я буду менять обязательно - она не вписывается в концепцию и просто убога, т.к. явно сделана в торопях, чтобы хоть что-то было для управления.

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

Главной концепцией должны остаться простота изменения дизайна и состава объектов.

Конечно, не все так радужно (за два дня качественно-новый движек не напишешь) и потому я решил рассказать о структуре, принципах работы, о недостатках и пр.



И так, небольшой пример из реальности для наглядности описанного: шаблон.
Шаблоны header, footer и меню я опустил за зромоздкостью и ненужностью здесь.

Это шаблон главной страницы сейчас. Лишний HTML я вырезал - там формы подписок, банеры и просто статическая информация.

Код: (HTML)
<table cellspacing="0" cellpadding="0" border="0" width="100%">
        <tr><td id="column_l">
<!-- column 1 -->
        <!-- last atricles -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">
                                <a href="view.php">Последние статьи</a>
                        </div></div>
                        <div class="box_content">
                                [!LAST_ARTICLES!]
                        </div>
                </div>
        <!-- last files -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">
                                <a href="viewfiles.php">Последние файлы</a>
                        </div></div>
                        <div class="box_content">
                                [!LAST_FILES!]
                        </div>
                </div>
        <!-- last links -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">
                                <a href="viewlinks.php">Последние ссылки</a>
                        </div></div>
                        <div class="box_content">
                                [!LAST_LINKS!]
                        </div>
                </div>
        <!-- maillists -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">Наши рассылки</div></div>
                        <div class="box_content">
                                <div class="box_item maillist">
................
                                </div>
                                <div class="box_item maillist">
................
                                </div>
                                <div class="box_item maillist">
................
                                </div>
                        </div>
                </div>
        </td>
<!-- column 2 -->
        <td id="column_m">
        <!-- last posts -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">
                                <a href="https://forum.shelek.ru/" target="_blank">Последние сообщения с форума</a>
                        </div></div>
                        <div class="box_content">
                                [!EXPORT_FORUM!]
                        </div>
                </div>
        <!-- hitech news -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">
                                <a href="viewblog.php">В мире технологий</a>
                        </div></div>
                        <div class="box_content">
                                [!SHOW_BLOG!]
                        </div>
                </div>
        </td>
<!-- column 3 -->
        <td id="column_r">
        <!-- news -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">Новости клуба</div></div>
                        <div class="box_content">
                                [!SHOW_LAST_NEWS!]
                        </div>
                </div>
        <!-- IRC channel -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">Канал IRC</div></div>
                        <div class="box_content">
................
                        </div>
                </div>
        <!-- reclame -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">Реклама</div></div>
                        <div class="box_content">
                                [!SHOW_RECLAME_LINKS!]
                        </div>
                </div>
        <!-- Различные баннеры -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">Баннеры</div></div>
                        <div class="box_content">
................
                        </div>
                </div>
        </td></tr>
</table>

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


Еще один пример того же процесса выделения общих частей из шаблонов.

Вот шаблон текущей страницы about.php:
Код: (HTML)
<table cellspacing="0" cellpadding="0" border="0" width="100%">
        <tr><td id="column_l">
<!-- column 1 -->
        <!-- our site -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">Наш сайт</div></div>
                        <div class="box_content">
                                <a href="about.php">О нас</a><br />
                                <a href="viewauthors.php">Авторы</a><br />
                                <a href="howto.php">Как стать автором</a><br />
                                <a href="rules.php">Правила оформления материалов</a>
                        </div>
                </div>
        </td>
        <td id="column_mr">
<!-- column 2 -->
        <!-- about -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">О нас</div></div>
                        <div class="box_content">
....................
                        </div>
                </div>
        </td></tr>
</table>

Для сравнения - мои новые шаблоны для 2.6.

site_index_start.html:
Код: (HTML)
<table cellspacing="0" cellpadding="0" border="0" width="100%">
        <tr><td id="column_l">
<!-- column 1 -->
        <!-- our site -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">Наш сайт</div></div>
                        <div class="box_content">
                                <div class="box_item"><a href="index.php?p=site&amp;s=about">О нас</a></div>
                                <div class="box_item"><a href="index.php?p=site&amp;s=authors">Авторы</a></div>
                                <div class="box_item"><a href="index.php?p=site&amp;s=howtoauthor">Как стать автором</a></div>
                                <div class="box_item"><a href="index.php?p=site&amp;s=artsrules">Правила оформления материалов</a></div>
                                <div class="box_item"><a href="index.php?p=site&amp;s=advert">Реклама</a></div>
                                <div class="box_item"><a href="index.php?p=site&amp;s=friends">Наши друзья</a></div>
                        </div>
                </div>
        <!-- links exchange -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">Обмен ссылками</div></div>
                        <div class="box_content">
                                <div class="box_item">
....................
                                </div>
                                <div class="box_item">
....................
                                </div>
                        </div>
                </div>
        <td id="column_mr">
<!-- column 2 -->

site_about.html:
Код:
<!-- about -->
<div class="box">
<div class="box_title_icon"><div class="box_title">О нас</div></div>
<div class="box_content">
....................
</div>
</div>

site_index_end.html:
Код:
</td></tr>
</table>


Недостаток этого деления я вижу в том, что список имен шаблонов я задаю программно. Это, кстати, вопрос для обсуждения. Как вариант, можно вынести списки шаблонов в отдельные файлы или в БД. Тут нужно думать наперед.


Пример для наглядности вставок.

lenta_add.html:
Код: (HTML)
        <!-- info -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">Внимание</div></div>
                        <div class="box_content">
                                <div class="box_item help">
Все сообщения попадают на премодерацию! Для того, что бы они появились в ленте модератор сайта должен подтвердить ввод сообщения.
                                </div>
                        </div>
                </div>
        <!-- add message form -->
                <div class="box">
                        <div class="box_title_icon"><div class="box_title">Ваше сообщение</div></div>
                        <div class="box_content">
                                <div class="box_item lenta_add_form">
<form action="index.php?p=lenta&amp;s=add" method="post">
<label>Кто написал:</label>
<input type="text" name="author" size="80" value="[!LENTA:ADD_AUTHOR_COMPONENT!]" />
<br />
<label>Заголовок:</label>
<input type="text" name="title" size="80" value="[!LENTA:ADD_TITLE_COMPONENT!]" />
<br />
<label>Текст краткого описания:</label>
<textarea name="des" rows="4" cols="60">[!LENTA:ADD_DES!]</textarea>
<br />
<label>Текст новости:</label>
<textarea name="text" rows="20" cols="60">[!LENTA:ADD_TEXT!]</textarea>
<br />
<input type="submit" value="Послать" />
<input type="reset" value="Стереть" />
</form>
                                </div>
                        </div>
                </div>




Пока остановлюсь - тут пожно много чего написать. Меня прежде всего интересует, заинтересует ли это еще кого-нибудь, чтобы можно было обсудить проект. Тут ведь самое интересное не в написании программы, а в детальном проектировании.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
notonly
Гость
« Ответ #1 : 10-01-2007 19:54 » 

1. Система шаблонов: чистый HTML. В отличии от многих движков (взять тот же SMF), где дизайн и верстка внедрены в php-код. Это позволяет работать над оформлением не программистам, что очень важно в плане разделения труда и специализации.
2. Система вставок: в код шаблона вставляются специальные конструкции вида [!имя_вставки!]. По сути, это callback для ф-ий объектов. Это вполне безопасно, т.к. обрабатываются вставки только в шаблонах, а контроль доступа (при штатной работе и от ошибок проектирования и создания шаблонов) обеспечивается самими объектами.

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


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

Идея шаблонов HTML мне очень нравится. Очень жду появления новой версии. И пожалуйста, хотябы минимальное описание по движку.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 10-01-2007 21:23 » 

notonly, прежде чем открывать тему, я прочел последние темы и заглянул на твой сайт - вроде бы у тебя все уже работает. Или у тебе другие планы?

Описание будет - для того тему и создавал, чтоб рассказать, но пока ждал отклика.
Сейчас я занят этим: https://forum.shelek.ru/index.php/topic,10434.msg146331.html#new
На след. неделе расскажу о шаблонах и вставках. Там довольно можно серьезно накрутить с косвеностью и как раз это я больше всего хочу обсудить, чтоб выбрать, каким способом будет сделана админка.

Одно могу сказать точно, что полного автоматизма в создании сайта не будет - все равно нужно приложить усилия. Я лишь хочу, чтобы они не потребовали глубоких знаний php и не нужно было рыться в коде.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
notonly
Гость
« Ответ #3 : 10-01-2007 22:33 » 

RXL, мой сайт сейчас работает на другом движке - это САР.

В сентябре я пыталась сделать простенький сайт на VU, но в тот момент было совсем сложно разобратся. Сейчас хочу делать второй сайт, не коммерсеский. С возможностью добавления статей посетителями, но так, чтобы для этого им не надо было заходить в админ.панель. Еще очень хочется, чтобы у статей был рейтинг (возможность оценки в баллах посетителями).

На сайте движка я не нашла новую версию, Вы еще не выкладывали? там 2.2. и бновления 2.2.1
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 11-01-2007 09:26 » 

Текущая версия в разработке и я ее не выкладывал.

ЧТо ты в данном случае подразумеваешь под статьями? Не достаточно ли ленты новостей (у нас она - второй блок с верху в центре: http://club.shelek.ru/ )? - там есть возможность добавлять сообщения без авторизации.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
notonly
Гость
« Ответ #5 : 11-01-2007 10:51 » 

Это не совсем то (лента новостей). Я хочу сделать сборник тостов и поздравлений, нужно разделение по темам. У меня есть шаблон такого сайта (http://test.notonlymail.com), но он без базы данных, хочу его пренести в движек.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 11-01-2007 18:04 » 

Это не детальное описание, а лишь принципы работы. Все написанное относится к новой версии (2.6).

Шаблон представляет из себя фрагмент HTML-кода, котопый может содержать вставки.
Какой шаблон будет обрабатываться, задается программно. Шаблон передается в ф-ию обработки, который находит в нем вставки и подменяет их (текстовым) результатом работы ф-ии, привязанной к этому шаблону.

Работа ядра состоит из следующих этапов:

1. Определение класса-обработчика вызывамой страницы (по одному из переданных параметров) и передача управления ему.

2. По другому параметру запроса (подзапрос) выбирается ф-ия класса-обработчика для выполения соответствующих запросу действий (опционально). После выполняется код, общий для всех поззапросов.

3. Свойство $templates ядра содержит иерархию шаблонов. Производится их обработка.

4. Если в обрабатываемом шаблоне обнаружена вставка, ищется соответствующая ей ф-ия (при необходимости динамически подгружаются модули). Если ф-ия найдена, управление передается ей, а возвращаемое значение вставляется на место вставки. Если ф-ия не найдена, то вставка остается неизменной.


Этап 1 позволяет иметь несколько обработчиков страниц от разных разработчиков.
Пример запроса: http://my.site.com/index.php?p=lenta
Вызывается модуль ленты новостей.

Этап 2 позволяет не писать в каждом классе однотипный код - требуется лишь задать таблицу соответствия.
Пример: http://my.site.com/index.php?p=lenta&s=add
Вызывается модуль ленты новостей, затем обработчик подзапроса "add" в нем.
Результат не обязательно линеен, т.к. можно обрабатывать остальные параметры (случай, когда новость отсылается из браузера на сайт), а если их нет - выбрать шаблон с формой.

Этап 3 - непосредственно обработка.

Этап 4 - подмена вставок. Вызванная ф-ия может, в свою очередь, передать на обработку еще один шаблон (или их набор). Т.е. переход к этапу 3.



Реальный пример.

Класс-обработчик lenta.php.
Код: (PHP)
<?php

class Object_lenta extends Site
{

function Object_lenta(&$owner)
{
        // задание таблицы подзапросов
        $this->subpages += array(
                'add' => 'lenta_add_message',
                );

        // инициализация класса-предка и обработка подзапросов
        parent::Site($owner);
}

function init()
{
        // входные параметры
        $this->id = isset($_REQUEST['id']) ? $_REQUEST['id'] + 0 : 0;
        $this->author = isset($_REQUEST['author']) ? $_REQUEST['author'] : '';
        $this->title = isset($_REQUEST['title']) ? $_REQUEST['title'] : '';
        $this->text = isset($_REQUEST['text']) ? $_REQUEST['text'] : '';
        $this->description = isset($_REQUEST['des']) ? $_REQUEST['des'] : '';

        // если класс - не обработчик страницы, а лишь донор ф-ий для вставок, то шаблонов не касаемся.
        if ($this->owner === false)
        {
                $this->templates['start'][] = 'lenta_index_start';
                $this->templates['end'][] = 'lenta_index_end';
                $this->templates['sub'] = 'lenta_view';
        }

        parent::init();
}

function fin()
{
        parent::fin();
}

/* ************************* */

function lenta_add_message()
{
        if (!empty($this->author) && !empty($this->title) && !empty($this->text) &&
                 !empty($this->description))
        {

                // ........ обработка и запись в базу

                $this->templates['sub'] = 'lenta_added';
                $this->refresh(3, 'index.php?p=lenta');
        }
        else
                $this->templates['sub'] = 'lenta_add';
}

/* ************************* */

function show_lenta_last()
{

        // ........ выдача нескольких последних новостей

        return $result;
}

function show_lenta_list()
{

        // ........ выдача списка новостей

        return $result;
}

function view_lenta_text()
{
        if ($this->id == 0)
        {
                // ..... если номер новости не задан, будет выдана последняя
        }

        // ........ выдача новости

        return $result;
}

function show_lenta_add_author_component()
{
        return urlencode($this->author);
}

function show_lenta_add_title_component()
{
        return urlencode($this->title);
}

function show_lenta_add_des()
{
        return htmlspecialchars($this->description);
}

function show_lenta_add_text()
{
        return htmlspecialchars($this->text);
}

}

?>



Перед созданием класса были заданны общие для сайта шаблоны - header и footer. Шаблон может переопределить их.

Шаблон header.html.
Код: (HTML)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
        <meta name="description" content="Клуб программистов "Весельчак У" - программирование и общение" />
        <meta http-equiv="Cache-Control" content="no-cache" />
        <meta http-equiv="Pragma" content="no-cache" />
        <meta name="copyright" content="(c) 2002-2007 Veselchak U" />
        <meta name="author" content="Громозека" />
        <meta name="modifier" content="Громозека, MOPO3, RXL" />
        <meta name="webmoney.attestation.label" content="webmoney attestation label#BA136CB9-266D-4190-8CB5-02359A2A10B0" />
        <meta name="keywords" content="club, клуб, veselchak u, весельчак у, programing, программирование, driver, драйвер, ddk, web, веб, php, perl, html, xml, js, javascript, dbf, databases, базы данных, mysql, oracle, interbase, c++, ansi c, vc++, visual, начинающим, for beginners, технологии разработки, uml, patterns, патерны, idef, ооп, java, c#, .net, delphi, vb, visual basic, vba, 1c, 1с, авторское по, embedded, net, network, сети, software, программы, games, игры, graphics, graphix, grafix, графика, articles, статьи, books, книги, files, файлы" />
        <link rel="stylesheet" type="text/css" href="styles/main.css" media="screen" />
        <link rel="stylesheet" type="text/css" href="styles/articles.css" media="screen" />
        <title>[!SITE:PAGE_TITLE!]</title>
        <link rel="alternate" type="application/rss+xml" title="Клуб программистов Весельчак У - RSS - Статьи" href="xml/articles.rss.xml" />
        <link rel="alternate" type="application/rss+xml" title="Клуб программистов Весельчак У - RSS - Файлы и книги" href="xml/files.rss.xml" />
        <link rel="alternate" type="application/rss+xml" title="Клуб программистов Весельчак У - RSS - Ссылки" href="xml/links.rss.xml" />
        <link rel="alternate" type="application/rss+xml" title="Клуб программистов Весельчак У - RSS - В мире технологий" href="xml/blog.rss.xml" />
        <script language="JavaScript" type="text/javascript" src="js/lib/utils.js"></script>
        <script language="JavaScript" type="text/javascript" src="js/lib/menu.js"></script>
</head>
<body>

<table cellspacing="0" cellpadding="0" border="0" width="100%" class="main_layout">
<!-- header -->
        <tr  id="header_line">
                <td rowspan="5">
                        <div id="overall_vertical_stick"></div>
                </td>
                <td>
                        <table cellspacing="0" cellpadding="0" width="100%" id="header">
                                <tr>
                                        <td class="header_l">&nbsp;</td>
                                        <td class="header_m">&nbsp;</td>
                                        <td class="header_r">
                                                <div style="font-weight: bold; font-size: 11px; text-align: right; float: right;">
                                                        <a href="index.php?p=admin" title="Вход в административную часть">Вход</a>
                                                </div>[!SITE:STATISTICS!]</td>
                                </tr>
                        </table>
                </td>
        </tr>
<!-- menu -->
        <tr id="menubar_t_line">
                <td>
                        <table cellspacing="0" cellpadding="0" width="100%" id="menubar_t">
                                <tr>[!SITE:STATIC_MENU!]
                                </tr>
                        </table>
                </td>
        </tr>
<!-- body -->
        <tr id="body_line"><td>

Шаблон footer.html.
Код: (HTML)
        </td></tr>
<!-- menu -->
        <tr id="menubar_b_line">
                <td>
                        <table cellspacing="0" cellpadding="0" width="100%"  id="menubar_b">
                                <tr>[!SITE:STATIC_MENU!]
                                </tr>
                        </table>
                </td>
        </tr>
<!-- footer -->
        <tr id="footer_line">
                <td>
                        <div id="footer">
                                <table border="0" cellpadding="0" cellspacing="0" width="100%">
                                        <tr>
                                                <td class="footer_l" width="220">
                                                        © Copyright "Весельчак&nbsp;У" 2002-2007
                                                </td>
                                                <td class="footer_m">
                                                        Все права на статьи принадлежат указанным авторам или в противном случае сайту "Весельчак&nbsp;У".
                                                        Перепечатка статей без указания ссылок и без уведомления администрации сайта - запрещена!
                                                </td>
                                                <td class="footer_r" width="180">
                                                        Powered by [!SITE:VERSION!]<br />
                                                        <a href="http://dev.shelek.com/">http://dev.shelek.com</a>
                                                </td>
                                        </tr>
                                </table>

                                <!-- XHTML 1.0 and CSS validated -->
                                <a target="_blank" href="http://validator.w3.org/check?uri=[!SELF_URL_COMPONENT!]" rel="nofollow"><img style="border:0;width:88px;height:31px" src="http://www.w3.org/Icons/valid-xhtml10" alt="" title="Valid XHTML 1.0 Transitional" /></a>
                                <a target="_blank" href="http://jigsaw.w3.org/css-validator/validator?uri=[!SELF_URL_COMPONENT!];profile=css2" rel="nofollow"><img style="border:0;width:88px;height:31px" src="http://www.w3.org/Icons/valid-css2" alt="" title="Valid CSS2!" /></a>

                                <!-- mail.ru counter - club.shelek.com - рассылка -->
                                <a target="_blank" href="http://top.mail.ru/jump?from=1043901"><img src="http://dd.ce.bf.a0.top.list.ru/counter?id=1043901;t=210" border="0" height="31" width="88" alt="" title="Рейтинг@Mail.ru (рассылка)" /></a>
                                <!-- mail.ru counter - forum.shelek.com -->
                                <a target="_blank" href="http://top.mail.ru/jump?from=378937"><img src="http://top.list.ru/counter?js=na;id=378937;t=52" border="0" height="31" width="88" alt="" title="Рейтинг@Mail.ru (сайт)" /></a>

                        </div>
                </td>
        </tr>
</table>
<script language="JavaScript" type="text/javascript">//<![CDATA[
var isIE = (navigator.appName.indexOf('Internet Explorer') != -1);
var isOpera = (navigator.appName.indexOf('Opera') != -1);
var isGecko = (navigator.appName.indexOf('Gecko') != -1);

function arrange_layout(first)
{
        if (!first && !window.innerHeight)
                location.reload();

        var screen_height = window.innerHeight ? window.innerHeight : document.body.clientHeight;
        document.getElementById('overall_vertical_stick').style.height = screen_height + 'px';
        var body_height = screen_height
                - document.getElementById('header').clientHeight
                - document.getElementById('menubar_t').clientHeight
                - document.getElementById('menubar_b').clientHeight
                - document.getElementById('footer').clientHeight - 20;

        if (isIE || isOpera)
                document.getElementById('body_line').style.height = body_height + 'px';
}

arrange_layout(true);
window.onresize = arrange_layout;
//]]></script>
<script language="JavaScript" type="text/javascript" src="js/menu.php"></script>
</body>
</html>


Код класса добавляет шаблоны lenta_index_start и lenta_index_end.

Шаблон lenta_index_start.html.
Код: (HTML)
                <table cellspacing="0" cellpadding="0" border="0" width="100%">
                        <tr><td id="column_l">
        <!-- column 1 -->
                <!-- lenta catalog -->
                                <div class="box">
                                        <div class="box_title_icon"><div class="box_title">В мире технологий</div></div>
                                        <div class="box_content">
                                                [!LENTA:LIST!]
                                        </div>
                                </div>
                <!-- reclame -->
                                <div class="box">
                                        <div class="box_title_icon"><div class="box_title">Реклама</div></div>
                                        <div class="box_content">
                                                [!RECLAME:LINKS2!]
                                        </div>
                                </div>
                        </td>
                        <td id="column_mr">
        <!-- column 2 -->

Шаблон lenta_index_end.html.
Код: (HTML)
                        </td></tr>
                </table>


В зависисмости от параметров в середину добавляется еще один шаблон.

Шаблон lenta_view.html.
Код: (HTML)
                <!-- lenta text -->
                                <div class="box">
                                        <div class="box_title_icon"><div class="box_title">Сообщение</div></div>
                                        <div class="box_content">
                                                [!LENTA:TEXT!]
                                        </div>
                                </div>

Шаблон lenta_add.html.
Код: (HTML)
                <!-- info -->
                                <div class="box">
                                        <div class="box_title_icon"><div class="box_title">Внимание</div></div>
                                        <div class="box_content">
                                                <div class="box_item help">
Все сообщения попадают на премодерацию! Для того, что бы они появились в ленте модератор сайта должен подтвердить ввод сообщения.
                                                </div>
                                        </div>
                                </div>
                <!-- add message form -->
                                <div class="box">
                                        <div class="box_title_icon"><div class="box_title">Ваше сообщение</div></div>
                                        <div class="box_content">
                                                <div class="box_item blog_form">
<form action="index.php?p=lenta&s=add" method="post">
<label>Кто написал:</label>
<input type="text" name="author" size="80" value="[!LENTA:ADD_AUTHOR_COMPONENT!]" />
<br />
<label>Заголовок:</label>
<input type="text" name="title" size="80" value="[!LENTA:ADD_TITLE_COMPONENT!]" />
<br />
<label>Текст краткого описания:</label>
<textarea name="des" rows="4" cols="60">[!LENTA:ADD_DES!]</textarea>
<br />
<label>Текст новости:</label>
<textarea name="text" rows="20" cols="60">[!LENTA:ADD_TEXT!]</textarea>
<br />
<input type="submit" value="Послать" />
<input type="reset" value="Стереть" />
</form>
                                                </div>
                                        </div>
                                </div>

Шаблон lenta_added.html.
Код: (HTML)
                <!-- info -->
                                <div class="box">
                                        <div class="box_title_icon"><div class="box_title">Внимание</div></div>
                                        <div class="box_content">
                                                <div class="box_item help">
<br />
Ваше сообщение добавлено в очередь. После проверки модератором оно попадет в ленту новостей.<br />
<br />
                                                </div>
                                        </div>
                                </div>


Таблица подмен для модуля lenta.
Код: (PHP)
                'LENTA:LAST' => 'show_lenta_last',
                'LENTA:LIST' => 'show_lenta_list',
                'LENTA:TEXT' => 'view_lenta_text',
                'LENTA:ADD_AUTHOR_COMPONENT' => 'show_lenta_add_author_component',
                'LENTA:ADD_TITLE_COMPONENT' => 'show_lenta_add_title_component',
                'LENTA:ADD_DES' => 'show_lenta_add_des',
                'LENTA:ADD_TEXT' => 'show_lenta_add_text',
« Последнее редактирование: 08-12-2007 17:18 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 15-01-2007 08:16 » 

Таки вопросы есть, или все понятно и я могу продолжать монолог?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
notonly
Гость
« Ответ #8 : 15-01-2007 08:32 » 

Пока, понятно, но надо пробовать в программе, тогда и вопросы появятся.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 15-01-2007 09:02 » 

notonly, вопрос, как у тебя с HTML и PHP? На каком уровне объяснение вести?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
notonly
Гость
« Ответ #10 : 15-01-2007 17:30 » 

notonly, вопрос, как у тебя с HTML и PHP? На каком уровне объяснение вести?
HTML более или менее, PHP = 0
Записан
notonly
Гость
« Ответ #11 : 03-02-2007 17:44 » 

RXL, когда Вы планируете выложить новую версию?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 03-02-2007 21:17 » 

notonly, пока не нашел времени. Жаль Много дел повисло в воздухе.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #13 : 04-01-2010 04:56 » 

У меня вопрос: может ли VU изменять структуру своих сайтов? Их внешний вид? Или для этого нужно поменять определенные шаблоны?
« Последнее редактирование: 04-01-2010 05:11 от Inkognito » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 04-01-2010 10:28 » 

Inkognito, не понятно, что ты спрашиваешь. Шаблоны сейчас везде есть, только выглядят они по разному.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines