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

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




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

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

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
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 и не нужно было рыться в коде.
Записан

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

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
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/ )? - там есть возможность добавлять сообщения без авторизации.
Записан

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

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
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++ » Записан

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

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
RXL
Технический
Администратор

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

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

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

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

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
notonly
Гость
« Ответ #8 : 15-01-2007 08:32 » 

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

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

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

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

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

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
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, пока не нашел времени. Жаль Много дел повисло в воздухе.
Записан

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

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
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, не понятно, что ты спрашиваешь. Шаблоны сейчас везде есть, только выглядят они по разному.
Записан

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

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines