Фреймворк SNDL

Anamnado
На сайте с 08.02.2010
Offline
242
#481
Sitealert:
Всё уже давно придумано. Для этой цели существует БД.

если я правильно понял идею

то вот БД то как раз вносить изменения очень очень неудобно.

ОЧЕНЬ.

помимо самого неудобства вероятность сломать код очень велика при этой правке...

И восстановить такую ошибку только бекапом. отката назад (undo ) нет а в файле есть..

а это значит что при любой необходимости мелкой правки делать бекап свежий... это все вырастит в пепец какую трудоемкость сделает все нецелесообразным.

реализация таких вот вещей в файле вероятность полезности больше..

Но я уже высказал мнение - актуально - до ну пусть 200 страниц. 1000 уже нет....

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

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

T7
На сайте с 19.09.2018
Offline
63
#482
ArbNet:
Я не хочу приходить к банальным шаблонизаторам

А дальше? В итоге все равно хтмл отдавать. ХМЛ, в терминах php, суть std/array. Смысл движку после манипуляций в админке std/array писать в хмл. А потом, чтобы отдать хтмл пользователю хмл обратно парсить в std/array. Лишняя операция. Объект после манипуляций в админке пишем в БД (монга рулит тут). А юзеру отдаем результат как Ф( Запрос, Объект, Контент ).

Ф это, не функция пхп, а абстрактное представление.

Типа имеем объект (пардон за объем, но это еще сильно сокращенный)

[title] => **********

[tpl] => Array
(
[type] => TWIG
[area] => /home/web/domains/1_local/var/tpl/twig/**********/
[template] => page.twig
)

[charset] => utf-8
[lan] => ru
[upload_image] => /home/web/domains/1_local/public/files/
[upload_image_web] => /files/
[good_tpl] => Array
(
[area] => /home/web/domains/1_local/etc/subs/www/tpl/
[goodslider] => goodslider.twig
[category_list] => catlist.twig
[good_list] => goodlist.twig
[good_card] => goodcard.twig
[mail] => mail.twig
)

[slider] => Array
(
[js] => assets/vendor/node_modules/tiny-slider/dist/min/tiny-slider.js
[css] => assets/vendor/node_modules/tiny-slider/dist/tiny-slider.css
[selector] => tiny_slider
)

[content_components] => Array
(
[0] => content
[1] => aside
[2] => article
[3] => btm_content
[4] => h1
[5] => before_cathit
)
[css_list] => /assets/themes/def/css/custom.min.css

и отдаем его в шаблоне [template] => page.twig

используя шаблоны для листинга/карточек и др приблуд магазина

[area] => /home/web/domains/1_local/etc/subs/www/tpl/

[goodslider] => goodslider.twig
[category_list] => catlist.twig
[good_list] => goodlist.twig
[good_card] => goodcard.twig
[mail] => mail.twig

для субдомена www, соответсвенно для урюпинск.сайт.ру шаблоны будут искаться в

/home/web/domains/1_local/etc/subs/урюпинск/tpl/ если нет, то дефолтные

ArbNet:
А как же стили? Ах ...

Отличная постановка задачи. Надо ее решать.

ArbNet
На сайте с 27.10.2019
Offline
125
#483
hrach:
Пример, приведенный Sitealert, делает все что вы тут "попросили" - вы же не знаете, что делают эти функции

А теперь подумайте. Пользователю захотелось поставить на страницу банально рекламный блок. Чтобы ему это сделать ему нужно открыть шаблон, найти модуль, в модуле какой-то костыль сделать чтобы этот рекламный блок появился на странице. Это вас конечно не смущает, это нормально, этим все занимаются.. :)

Опять не дошло? У меня же в структуре надо прописать элемент рекламного блока и всё.

ivan-lev:
ещё стили разных подключенных модулей-блоков могут конфликтовать, если этого не предусмотреть.
Возможно, есть смысл почитать про концепцию БЭМ...
timo-71:
Отличная постановка задачи. Надо ее решать.

Вот иногда у вас думалка начинает работать, а потом снова отключается.

У меня эта проблема решена и я ранее в теме рассказывал как это реализовано. Структура страницы одна и движок классом открытия структуры получает все элементы этой страницы, затем генерирует её. Так же когда запрашиваются стили, открывается структура и получается список нужных стилей, перед добавлением проверяет есть ли уже такие стили или нет, если нет то добавляются. Я кстати над этой проблемой думал не мало и тестировал разные способы.

А теперь ещё подумайте все.

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

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

Кстати когда я делал первый свой проект Аякса тогда не было и я как тогда говорили тоже изобретал велосипед :) сначала на технологии Flash потом на Js И такое ощущение, что те кто раскрутили Аякс у меня просто подглядели и взяли мой код, так как подход и способ именно тот какой тогда сделал я. Передача данных кстати реализована на xml. Что и сейчас даже практикуется.

В психологии есть такой феномен обезьянки :)

Провели такой эксперимент. Посадили 5 обезьян в клетку. Посередине клетки повесили банан. Ну все обезьяны естественно стали пытатся его достать. А их тут же стали поливать из шланга холодной водой. Обезьяны перестали доставать банан на некоторое время, а потом снова стали пытаться его достать. И их снова полили водой из шланга. Потом некоторые остались в стороне, а одна или две всё ещё пытались достать банан. И их опять облили водой. Потом все обезьяны перестали доставать банан.

Затем одну обезьяну забрали из клетки и посадили новую. Новая обезьяна сразу стала пытаться достать банан. А старые стали её отгонять, мол нельзя. Затем ещё одну поменяли на новую. Новая снова полезла за бананом, а другие её отгоняли и та которую не обливали водой с большим энтузиазмом это делала. Затем в клетке не осталось ни одной из первых обезьян которых обливали водой. И Сколько не меняли обезьян они новеньким не позволяли достать этот злосчастный банан. Так как нельзя!! Потому что так заведено!!!

Я понял что тут нет реальных хороших разработчиков, здесь находятся в основном обычные пользователи конструкторов. И вы рьяно как те обезьянки в клетке защищаете свой банан(в виде использования готовых решений конструкторов, шаблонизаторов). Даже если у кого и появляются здравые мысли сделать что-то лучше, потом после кто-то прокомментирует что не надо изобретать ничего(исходя из своего негативного опыта так как у него ничего не получилось) и тут же вы встаёте на его сторону. Стадо "барашков" образовывается.

Я извиняюсь за алегории просто иначе объяснить ваше поведение не получиться. А в стаде барашков чтобы отстоять свою точку зрения нужно быть волком :)

Обсуждение разработки на моём фреймворке https://discord.gg/23N4s9x2kp
Sly32
На сайте с 29.03.2012
Offline
303
#484

ArbNet, Вот у тебя опять все дураки а ты Дартаньян!

Вот пример шаблона на Джанге - это базовый шаблон, который расширяется инклюдами. Уверен, что здесь любой, кто знаком с фреймворками но не знаком с Питоном легко поймет что тут и как. Стили вставить - да без проблем, расширить - как угодно!


{% load static %}
<!DOCTYPE html>
<html lang="ru-RU">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
{% block description %}
<meta property="og:locale" content="ru-Ru">
<meta property="og:type" content="main">
<meta property="og:title" content="{{ object.seo_title}} | ТНТ в Беларуси">
<meta property="og:description" content="Представитель каналов спутникового телевидения | {{ object.seo_description}}">
<meta property="og:url" content="https://oao-bst.by">
<meta property="og:site_name" content="ОАО Белсчеттехника ">
<meta property="og:image" content="/media/{{ object.thumb}}">
{% endblock description%}

{% block keys %}
<title> {{ object.title }} | Спутниковые каналы в Беларуси </title>
<meta name="keywords" content="Спутниковые каналы в Беларуси, {{ object.tags|default_if_none:'' }}">
<meta name="description" content="Спутниковые каналы в Беларуси {{ object.seo_description|default_if_none:'' }}">
<meta name="author" content="mbgbel.by">
{% endblock keys%}
{% block css %}
<link rel="stylesheet" href="{% static 'core/js/swiper/dist/css/swiper.min.css' %}">
<link rel="stylesheet" href="{% static 'core/css/style.css' %}">
{% endblock %}
{% block single_css %}{% endblock %}
<!-- Fav and touch icons -->
<link rel="shortcut icon" href="{% static 'core/images/favicon.ico' %}" type="image/x-icon">


{#<script src='https://www.google.com/recaptcha/api.js'></script>#}
</head>
<body>
{% block header %}
{% include 'core/menu/top_header.html' %}
{% include 'core/menu/main_menu.html' %}
{% endblock %}

{% block content %}
{% endblock %}

{% block modal %}
{% endblock %}

{% block footer %}
{% include 'core/footer.html' %}
{% endblock footer %}

{% block footer_script %}
<script src="https://unpkg.com/popper.js@1.12.6/dist/umd/popper.js" integrity="sha384-fA23ZRQ3G/J53mElWqVJEGJzU0sTs+SvzG8fXVWP+kJQ1lwFAOkcUOysnlKJC33U" crossorigin="anonymous"></script>
<script src="https://unpkg.com/bootstrap-material-design@4.1.1/dist/js/bootstrap-material-design.js" integrity="sha384-CauSuKpEqAFajSpkdjv3z9t8E7RlpJ1UP0lKM/+NdtSarroVKu069AlsRPKkFBz9" crossorigin="anonymous"></script>
<script src="{% static 'core/js/maskedinput.js'%}" type="text/javascript"></script>
<script>$(document).ready(function() { $('body').bootstrapMaterialDesign(); });</script>
<script defer src="{% static 'core/js/swiper/dist/js/swiper.min.js' %}"></script>
<script defer src="{% static 'core/js/index.js' %}"></script>
<script defer src="{% static 'core/fontawesome-free-5.4.1-web/js/fontawesome.min.js' %}"></script>
<script defer src="{% static 'core/js/detect.min.js' %}"></script>

{% if not user.is_authenticated %}
{% if not user.is_superuser %}

{% endif %}
{% endif %}
{% endblock %}
{% block footer_script_inner %}{% endblock footer_script_inner %}

</body>
</html>

Поднимите руки, кто не врубился в код, что выше? 🍻

---------- Добавлено 07.12.2019 в 10:24 ----------

ArbNet:
Даже если у кого и появляются здравые мысли сделать что-то лучше

Как только появятся - с удовольствием это обсудим

---------- Добавлено 07.12.2019 в 10:30 ----------

Anamnado:
то вот БД то как раз вносить изменения очень очень неудобно.

Вы вообще хоть работали с бд? Ничего удобнее д сих пор не придумано!

---------- Добавлено 07.12.2019 в 10:30 ----------

ArbNet, Ну вот я готов попробовать твое изделие - как его поставить в пару кликов и начать работать? Жду инструкцию

ArbNet
На сайте с 27.10.2019
Offline
125
#485
Sly32:
Поднимите руки, кто не врубился в код, что выше?

Лично мне эти портянки не нравятся :) Поднимите руки, кому хочется в этом разбираться?

ЗЫ. Ну вы то ладно, а в тот обычный человек явно ничего не поймёт в таком коде :)

Sly32
На сайте с 29.03.2012
Offline
303
#486
ArbNet:
Лично мне эти портянки не нравятся

Приведи пример готовой базовой страницы на своем - сравним

Я привел пример именно фреймфорка части. Например существует Django CMS - там уже все это готово и можно сразу создавать модули и страницы - вышеприведенный код включен. Ты определись уже что у тебя - фреймворк или КМС

ArbNet
На сайте с 27.10.2019
Offline
125
#487
Sly32:
Приведи пример готовой базовой страницы на своем - сравним

Позже приведу пример готового сайта.

Sly32:
Ты определись уже что у тебя - фреймворк или КМС

У меня фреймворк, который будет иметь узлы с компонентами, а пользователь в xml будет прописывать нужные ему элементы.

Опять же если подумать ;) на конструктор это не похоже согласитесь.

Sly32
На сайте с 29.03.2012
Offline
303
#488
ArbNet:
Опять же если подумать на конструктор это не похоже согласитесь.

Это именно конструктор в самой зачаточной форме - I don't know language, i can't coding, but i'd like to get website!

ArbNet:
Позже приведу пример готового сайта

I don't care examples, я хочу инструмент, на котором я могу делать сайт!

Can you get it me?

Anyway, я хочу сказать автору спасибо за топик! Пусть я не вижу перспектив, но это всяко интереснее чем читать темы про то почему не виден тэг или в сотый раз про то почему не работает Вордпрес! Жаль что автор не умеет слушать и идет спотыкаясь по своим граблям, но возможно у него куча свободного времени)

Кстати вопрос на подумать я хочу скрыть страницу или часть страниц от неавторизованных пользователей - как это ты будешь реализовывать? Я не хочу морочится с паролями - как добавить авторизацию через социалки без сторонних приложений типа Онила?

T7
На сайте с 19.09.2018
Offline
63
#489
ArbNet:
поэтому и существуют шаблонизаторы, они упрощают работу, но замедляют скорость генерации страницы.

Профилирование. Кстати рекомендую сразу включить этот функционал в ваш движок.

Class Aapp\Response\RenderHtml ready	11.09 ms	0.63 ms	1.19/2.00, mb

Start render page by TWIG 11.12 ms 0.03 ms 1.19/2.00, mb
TWIG loaded 17.64 ms 6.52 ms 1.76/4.00, mb
TwigExtension loaded 17.75 ms 0.11 ms 1.76/4.00, mb
HTML ready 19.60 ms 1.85 ms 1.89/4.00, mb
Js/Css included 20.10 ms 0.49 ms 1.93/4.00, mb
Debug data 20.11 ms 0.01 ms 1.93/4.00, mb
Profiler 20.12 ms 0.01 ms 1.93/4.00, mb #последняя операция перед
echo $this->html;

Сколько там? 9 мс. Не так то и много. В вашем случае, хтмл так же надо собрать и хмл обработать - какие то ресурсы потребуются.

Тут же вам пытаются донести:

1. если телегу поперед лошади запрягать, обычно ничего хорошего не получается. Сначала структура приложения, обработка ошибок, Exception, обработка запроса (урл, хеадеры, тип запроса, куки и т.д.), автолоадер, роутер, идентификация пользователя, механизмы обработки роутов, механизмы удобной работы с данными и т.п. скучные дела. И только потом сборка и отгрузка хтмл

2. Гибкое управление компонентами хтмл вполне достижимо без хмл. Данные собранные в ходе обработки запроса + шаблонизатор. Как правило, достаточно документированный, что бы им пользовались и разработчики под ваш движок и продвинутые редакторы сайта. Этого вполне достаточно.

switch($type){

case 'TWIG':
$this->twig_out();
$this->html_replace();
$this->is_debug();
break;

case 'PHP':
$out = Core::outget();
require $this->tpl ;
exit(0);
break;
}
echo $this->html;

Не нравится шаблонизатор? Нативный пых: require $this->tpl ;


Пример из Phalcon PHP Framework
<link rel="shortcut icon" type="image/x-icon" href="<?php echo $this->url->get('img/favicon.ico')?>"/>
</head>
<body>
<div class="container">
<?php echo $this->getContent(); ?>
</div>


---------- Добавлено 07.12.2019 в 11:54 ----------

Sly32:
но это всяко интереснее чем читать темы про то почему не виден тэг или в сотый раз про то почему не работает Вордпрес!

Аналогично

ArbNet
На сайте с 27.10.2019
Offline
125
#490

timo-71, Вы говорите о вещах о которых все знают и я в том числе, эти способы работают. НО чтобы реализовать конкретную задачу, например:

Появляется новая идея создания сайта для владельцев магазинов ремонта квартир. На сайте должны быть категории товаров, адреса магазинов, сравнение цен на товары и тд. Специфический такой сайт. Создателю сайта придётся заплатить хорошенькую сумму денег чтобы такое сделать. Можно потратить годы времени на изучение программирование и самому делать. На написание под такие не стандартные задачи уйдёт куча времени.. И не факт даже если заказать у фирмы делающей сайты сделают качественно.

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

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

Sly32:
Кстати вопрос на подумать я хочу скрыть страницу или часть страниц от неавторизованных пользователей - как это ты будешь реализовывать?

Элементарно :) В свойствах компонента или методе класса узла поставить проверку, авторизован пользователь или нет и выдавать соответствующий результат.

Sly32:
Я не хочу морочится с паролями - как добавить авторизацию через социалки без сторонних приложений типа Онила?

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий