[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Конструктор шаблонов
forza
Доброго времени суток.
Поставил, так сказать, перед собой задачу (для тренировки и получения опыта) сделать онлайн конструктор шаблонов. Например создавать/удалять динамически блоки, изменять их ширину/высоту двигать менять их друг с другом и все это в онлайн режиме. Естественно эту част функционала надо делать на JS, и с этим у меня нету проблем. А вот с серверной частью у меня проблемы. Никак не могу придумать, как это должно быть реализовано, чтобы у каждого пользователя был свой шаблон.
У меня пока такая идея. После того, как пользователь сгенерировал и настроил себе шаблон, надо его сохранить. Настройки думаю хранить в виде JSON объекта например (цвет ссылок => #0d0d0d и т.д). Потом, когда через веб пользователь обратится к страничке, на основе его настроек сформировать HTML и CSS шаблон.
В этом подходе я вижу проблему в том, что если у 1 пользователя будет несколько шаблонов, а пользователей, допустим, будет 100, то в таком случае будет очень большое количество файлов.

_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
Игорь_Vasinsky
а как ты хотел)

можешь не создавать файлы - строить страницу динамически

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
forza
Даа smile.gif видимо без файлеков не получится.
Строить страницу каждый раз динамически этож убийство сервера :Д

UPD
А если хранить сгенерированный HTM/CSS шаблон в базе как текст? Будет ли выборка по ID быстрее чем подключение файла?

_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
Quieteroks
forza
Если у тебя нет проблем с клинской частью на js, не проще ли тогда хранить настройки пользователя в базе, отдавать их скрипту, а тот уже сам сделает нужные настройки у пользователя.

А удаление каких либо блоков (к примеру последние новости) в шаблоне, можно отдельно записать и не генерировать их для данного пользователя.
forza
Quieteroks
Цитата
Если у тебя нет проблем с клинской частью на js, не проще ли тогда хранить настройки пользователя в базе, отдавать их скрипту, а тот уже сам сделает нужные настройки у пользователя.

Например в голове сайта вставить <STYLE type="text/css"></STYLE> и уже там вывести его настройки стилей

Цитата
А удаление каких либо блоков (к примеру последние новости) в шаблоне, можно отдельно записать и не генерировать их для данного пользователя.

Извиняюсь, не совсем понял идею.

Казалось бы со стилями разобрался, а вот не придумал еще как быть со основным скелетом разметки. Может быть его тоже хранить в виде строки и подключать его в основной шаблон таким образом.

Основной
<html>
<head></head>
<title></title>
<body>
<?=
$ui['html_skeleton'] ?>
</body>
</html>


html_skeleton
<div id="left">
{{horizontal_menu}} //Название виджета/блока
{{recent_news}} //Название виджета/блока
</di>
<div
id="content">
{{content}}
</div>
<div
id="right">
{{archive}} //Название виджета/блока
</div>


_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
Quieteroks
forza
Ну тут уж я конкретно идеи не знаю, но css наверно нужно либо на сервере парсить и заменить какие либо флаги типа {color} на нужный выбранный пользователем. Либо скриптом, с которым у тебя проблем нет вроде, добавить эти свойства в теги или как то переопределить в самом стиле. К примеру в том же js получить стиль в строку и у клиента подставить нужные значения из json объекта в блоке head...

А скелет храни в одном файле, где у тебя будет стоять конструкция настроек пользователя, заранее полученная из той же базы:

<html>
<head></head>
<title></title>
<body>
<?php
if($user['sceleton']): ?>
<?=
$ui['html_skeleton'] ?>
<?php
endif;?>
</body>
</html>


Таким образом ты не генерируешь ненужный контент пользователю, а разукрашиваешь все на его стороне при помощи json настроек и хитрого скрипта. А пока все красить, показываешь ему прелоадер к примеру.

Опять таки, нужно думать где и как сохранить стиль в кэше на время использования.
К сожалению я не осведомлен, можно ли сформировать css файл из строки и оставить у пользователя в кэше.

Ты главное продумай концепцию, что можно что нельзя, а потом делай. К примеру тот же css в шапке, подгружаешь основные блоки в общем css, а тонкая настройка с перекрытием (вроде стили в шапке перекрываю те что в файле) уже в самой шапке при помощи скрипта. И так же с модулями, какие можно выключить, какие переместить и как ты это отобразишь...
forza
Quieteroks
Спасибо Вам за разъяснения, есть над чем задуматься и проанализировать. Буду думать, составлять схемки работы программы.

UPD
Строка созданная на стороне клиента не закешируется у него в браузере

_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
manchot
Цитата (forza @ 7.12.2012 - 16:16)
Quieteroks

UPD
Строка созданная на стороне клиента не закешируется у него в браузере

Значит, таки нужно обновлять страницу и отдавать стиль php скриптом

_____________
Только ежедневные изнурительные тренировки дают видимое преимущество в бою (с) Брюс Ли
forza
Ага, генерировать css на стороне сервера, как и все сегменты страницы, заодно перекрывая стилями, если пользователь изменил настройки в шаблоне.

UPD
А вообще, да, как заметили выше - основной файл CSS должен присутствовать и быть тонко настроен и минимизирован.

_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
manchot
Или так


<link rel="stylesheet" href="/css.php?stylesheet=user_xxx" type="text/css" />



/* get the stylesheet */
$stylesheet = @is_file($_GET['stylesheet']) && strtolower(substr(strrchr($file_name,'.'),1)) == 'css' ? $_GET['stylesheet']:'style.css';

/* set the header information */
//will be output as css

header('Content-type: text/css');

//set an expiration date
$days_to_cache = 10;
header('Expires: '.gmdate('D, d M Y H:i:s',time() + (60 * 60 * 24 * $days_to_cache)).' GMT');

/* load in the stylesheet */
$content = @file_get_contents($stylesheet);

// что то делаем с содержанием.....

/* spit it out */

echo $content;



_____________
Только ежедневные изнурительные тренировки дают видимое преимущество в бою (с) Брюс Ли
forza
Тоже не плохой вариант, но все-таки я бы отдал одному основному файлу предпочтения потому что:
Сервер быстрей отдаст статичный CSS файл нежели ему придется запускать PHP скрипт, затем мне надо будет найти в базе пользователя по ID. Достать его настройки и прочую лабуду.
Статичный минимизированный файл будет максимум весить 30-35 KB + он сразу закэшируется у пользователя в барузаере, пока я не подставлю ему новую версию, если что-нибудь изменится.

_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.