логин: 
<< предыдущая заметка 
09 марта 2017
Шаблон комментариев

Я сейчас активно обновляю движок.

Про комментарии могу рассказать следующее.

Простыня комментариев — это лента из блоков:

<div id=1001 class=c0 style='margin-left: XXX px'>сюда ставится коммент по шаблону</div>
<div id=1002 class=c0 style='margin-left: XXX px'>сюда ставится коммент по шаблону</div>
<div id=1003 class=c1 style='margin-left: XXX px'>сюда ставится коммент по шаблону</div>
<div id=1004 class=c0 style='margin-left: XXX px'>сюда ставится коммент по шаблону</div>

Сам шаблон комментария по умолчанию (они, кстати, могут быть разные и указываться в дизайне страницы) лежит здесь для базового дизайна страниц: http://lleo.me/dnevnik/install?template/comm/comment_tmpl.ht[...]

В шаблоне встречаются переменные типа {имя} (или {#имя} — то же самое, но с очисткой нежелательных html-символов).
Эти переменные шаблону передает сервер, в них самая разная информация о комментарии. Давайте я их перечислю:

{#id} — уникальный номер комментария в базе (у меня сейчас чуть ли не шестизначный)
{paren} — некая готовая html-конструкция (как правило, иконка), которая по клику покажет раскроет родительский комментарий, если комментарий не первого уровня. Движок ее рисует сам в другом месте (что наверно мое упущение).

{#BRO} — сокращенное имя браузера автора комментария
{#BROlong} — полное имя браузера автора комментария

{#country} — двухбуквенный код страны
{#countryname} — полное название страны
<i class="flag-{#country}"></i> — на месте этой конструкции появится иконка — флажок страны

{#city} — сокращенное название города, если он определился по IP
{#citylong} — полное название города, если он определился по IP

{date} — дата комментария
{datetime} — не помню, тоже какая-то дата, наверно полная, с минутами

{rul} — 1 или 0 — пометка для самых важных комментариев (в реальной жизни пока не часто используется, но в принципе идея была для постов (напр. «Как мне настроить роутер ASUS RT16N?) выводить на первый уровень только самые ценные комментарии с важными инструкциями.

{#golos_plu} число плюсиков, которые получил комментарий
{#golos_min} число минусиков, которые получил комментарий

{ifpodzamok} переменная-флаг: 1 — комментарий просматривает тот, кто имеет подзамочный доступ (им показывается чуть больше информации), 0 — обычный посетитель

{admin} переменная-флаг: 1 — комментарий просматривает админ сайта (ему показывается больше информации), 0 — обычный посетитель или подзамочный

{name} — имя автора комментария

{#img} — линк на иконку автора комментария (если она есть)

{text} — сам текст комментария (конструкция с очисткой {#text} не применяется, так как при обработке комментария движок уже мог вставить HTML-конструкции: картинки, ссылки, аудиоплеер)

{newuser} переменная-флаг: 1 — автор комментария под небольшим подозрением на спам, 0 — обычный автор

{scr} переменная-флаг: 1 — комментарий скрыт ото всех, кроме админа и подзамков, 0 — открыт

Теперь пару слов про систему условных ветвлений (о да, господи, наросло в движке и такое). Формат покажу на примере фразы:

Ага, я вижу, что вы {?country:
Россия:кацап
Украина:хохол
Израиль:жид
США:пиндос
:не определились
*:из какой-то малопопулярной страны
?}, с чем вас и поздравляю!

начало и конец тэга {? ... ?}, варианты перечислены по строкам и разделены двоеточием. В примере движок выдаст разный текст в зависимости от значений переменной country. Для США напишет «Ага, я вижу, что вы пиндос, с чем вас и поздравляю!», звездочка * ставится в конце списка и означает «любое». В качестве текста вместо «пиндос» может бюыть любая конструкция, включая HTML-тэги, лишь бы там не было перевода строки или, упаси боже, еще одного такого же ветвления. Впрочем, есть один вариант.

Второй способ записи той же конструкции — заменить все переводы строки на знак | Вот так:

Ага, я вижу, что вы {?country:|Россия:кацап|Украина:хохол|Израиль:жид|США:пиндос|:не определились|*:из какой-то малопопулярной страны|?}, с чем вас и поздравляю!

И вот эту форму записи (в виде одной строки) можно вставлять в качестве строк в форму записи первого типа.
То есть, условное ветвление все-таки допускает вложенность, но всего одну на каждый из вариантов.

Осталось сказать, что в движке есть ряд аякс-обращений к движку (действий), обычно они делаются через JS-функцию majax: onclick=«majax(...)"

Для сокращения размера текста некоторые из этих функций вынесены отдельно и находятся в главном JS-файле фреймворка main.js: http://lleo.me/dnevnik/install?js/main.js|

Поэтому если в темплейте комментария встречается что-то типа «kl(this)", то это означает, что такой короткой записью вызывается небольшая стандартная функция, которая по this пойдет искать вверх до главного DIV, чтобы найти id комментария, после чего даст некий запрос на сервер. Например, kpl(this) поставит комментарию плюсик, kmi(this) — минус. Все такие запросы обрабатывает сервер, после чего обычно комментарий (главный DIV id=XXXXX) заменяется новым содержимым, которое высылает сервер. Если посетитель поставил комментарию плюсик — ему заменится весь комментарий, и там уже будет виден его плюсик.

В новой версии движка полезные иконки сделаны одним файлом и сверстаны в css. Например, иконка почтового конвертика: <i class='e_kmail'></i> Если на него кликнуть, движок откроет окошко для написания комментария в личку: <i class='e_kmail' title='написать' onclick="majax('mailbox.php',{a:'newform',unic:{unic}})"></i> Это более новое наслоение, которое я не успел убрать в отдельную функцию.

Для разных данных в одном комментарии есть несколько классов, например: <div class=ctxt>{text}</div> Эти классы заданы в главном sys.css: http://lleo.me/dnevnik/install?css/sys.css| Но по-хорошему им там делать нечего, их можно менять как угодно (короткие имена им были даны для экономии трафика, ведь бывают простыни и по 500 комментариев).

/* комментарии */
.opc, .cnam, .rul1,.rul0 {cursor: pointer}
.rul1,.rul0,.cplu,.cmin,.kmail {float:left}
.c0, .c1, .c2, .c3, .c4, .c5, .c6 { font: 80% sans-serif, Helvetica, Arial, Verdana; width: 60% !important; border: 1px solid #bbb;
/* IE */ filter: progid:DXImageTransform.Microsoft.shadow(direction=120, color=#888888, strength=10);
box-shadow: #888 5px 5px 5px; border-radius: 0.8em 0.8em 0.8em 0.8em; overflow: auto; padding: 0.4em 0.4em 0.4em 0.4em; margin: 0.4em 0 0 0.4em; }
.c0 { background-color: #AAFAFA; }
.c1, .opc { background-color: #F1F1F1; }
.c2 { background-color: #FFFBDF; border: 1px solid red; }
.c3 { background-color: #FFEBCD; border: 1px solid red; }
.c4 { background-color: #eAf; border: 1px solid red; }
.c5 { background-color: #Aef; border: 1px solid red; }
.c6 { background-color: #Aef; border: 1px solid red; }
.ctxt { padding: 5pt; text-align: justify; }
.cwho,.ctim,.cbro { font-size: 8pt; display:inline; margin: 0 10pt 0 10px; top: 0px; position: relative; float: right; }
.ctim,.cbro,.cwho,.kr,.rul0,.rul1,.kmail,.cnam,.cplu,.cmin { display:inline; }
.cnam { font-size: 12pt; font-weight: bold; }
.cplu,.cmin { font-size:10pt; }
.cplu {color:#f99;cursor:n-resize} .cplu:before { content:'+'} .cplu:after { content:' '}
.cmin {color:#99f;cursor:s-resize} .cmin:before { content:'\2212'} .cmin:after { content:' '}
.cplu:hover,.cplu:active {color: red;}
.cmin:hover,.cmin:active {color: blue;}

Осталось сказать, что сам комментарий имеет классы .c0, .c1, .c2, .c3, .c4, .c5, .c6
c0 — обычный
c1 — скрытый (подзамкам, админу и автору вышестоящего комментария, если это был ответ ему) виден с зеленым фоном
c2 — кажется, комментарий админа
остальные — не помню, не используются в реальной жизни

И последнее. У комментария есть переменная level, которая 0 для комментария нулевого уровня, а 1, 2, 3 и т.п. для соответствующего по глубине в ветке. Сейчас в движке этот level тупо умножается на 50px (точно не помню) и для основного DIV комментария (того, у которого id, внутрь которого помещается вышеописанный темплейт) делается отступ margin-left: (level*50) px


Не сказать, чтобы я считал эту систему умной, но просто другой я не придумал. Если надо в ней что-то поменять — с удовольствием поменяю.

<< предыдущая заметка  
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Windows Firefox
 Санкт-Петербург
1
0
Осталось сказать (#6697567)
Осталось сказать, что нужно сделать вложенность для мобильных устройст не больше 3х например...


Linux Ubuntu Firefox
 Швейцария
0
0
Andrey Pozdnyakov
И когда их больше 3х, можно следующий уровень сдвигать влево и помечать другим цветом фона, и так по циклу.
Windows Firefox
 Европа
0
0
lleo.me/[email protected]Глеб
Можно и так. А можно сделать удобно, понятно и красиво.
Windows Safari Chrome
 Москва
0
0
Ilia
На Бинонике с комментариями какая-то фигня.

При нажатии на "посещения" выдаёт ошибку 500. При попытке прикрепить скриншот (png) ругается: "Что за мусор ты шлёшь?". А капча отдельно доставила:


Linux Safari Chrome
 Европа
0
0
Roman Erykalov
Привет! Переношу движок с сайтами на новый сервер. Перенос проходит нормально (правда, на 7 php не работает, к сожалению, вообще). Но вот не хочет обновляться. При входе в модуль /install в окне обновления Select server при нажатии кнопки check update вылезает Error key. В принципе, мне и так хватает функционала 13 или 15 года (не помню, когда обновлялся), но вдруг исправимо. Скрин нужен?
<< предыдущая заметка