логин: 
<< предыдущие 5

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

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

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

<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


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

комментариев 5 | оставить комментарий

Вопрос: два компа под Линуксом соединены в сеть, на одном поднят SMB-сервер Samba, на другом — SMB клиент (cifs). При копировании длинного файла на сервер записывается ровно 2048Мб, после чего возникает ошибка. В каких настройках проблема?

Ответ под катом.

[показать спрятанное]
Правильный ответ: просто на диске сервера осталось свободно ровно 2048Мб. Ну почему со мной всегда случается такое?!
комментариев 19 | оставить комментарий

Как вы помните, в движке комментарии делаются по шаблону, который задается в файле /template/comm/
comment_tmpl.htm Это по-умолчанию. Но для комментариев конкретной заметки шаблон (как и дизайн) можно переключить на другой файл из той же папки (например: comment_ej.htm). Чтобы это сделать, нужно в темплейт заметки, либо прямо в сам текст заметки вставить строку, которая инициализирует переменную в JS и PHP вместо той, что по-умолчанию:

<script>var commenttmpl='{_PHPEVAL:$o=$GLOBALS['comment_tmpl']='comment_ej.htm';_}';</script>

В многопользовательском режиме движка пока не работает по причине запрета PHPEVAL (пользовательский PHP), но если кому-то это нужно на Бинонике, я напишу модулёк, который это будет делать сам.

Необходимость менять для отдельной заметки дизайн комментариев мне видится при организации всяких там конкурсов и акций, тестировал тут: http://lleo.me/dnevnik/2015/03/21_ejik.html

комментариев 2 | оставить комментарий

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

Обновились, насколько я могу видеть, только трое (условно обозначим их как z--r, Мик-н и Кон-в).

Вы спросите, как я это вижу? Дело в том, что в инсталляторе движка какое-то время была кнопка (кажется, ее давно нет) типа «похвастаться установкой», по нажатию которой на мой сайт сообщался адрес вашего движка. В первый год эти адреса даже выводились на страничке слева, но потом я взялся за ум и список убрал — именно на такой случай, если найдется неприятная уязвимость: чтоб враг не узнал, где ее искать. Сейчас я этот список нашел и прошелся руками по всем. Большая часть движков давно не существует, но некоторые работали. Я полагаю, что список серверов у меня был далеко не полный, а очень-очень старый. Поэтому если вы ставили движок в течении последний пары лет, то его в нем не оказалось.

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

Так движок стал неуязвим у Ер-ва, vo-ne и М.М. Еще раз извините за это вынужденное вмешательство, я лишь обновил один файл php, переименовав старый.

Другие три движка (как я уже писал выше) попытку хака отвергли — значит, уже обновлены.

Все остальные мне просто неизвестны, но если вы читаете эти строки — обновите движок с любого из источников.

Еще раз извините.

комментариев 11 | оставить комментарий

Я задолбался подгружать пользовательские юзерпики по месту жительства. Они тормозят загрузку страницы дневника (потому что не везде быстрый сервер), со временем исчезают (особенно у Гугля), и вообще. Поэтому отныне при логине движок берет картинку, обрабатывает ее, обжимает, и кладет пользователю в папку как user/{unic}/userpick.jpg

А чтобы преобразовать все уже имеющиеся, в /install появляется кнопка «Преобразовать IMG (2499)».
И вот эти 2499 уже много-много минут отрабатываются, пока я пишу этот пост:


PS: Речь пока о /dnevnik — все новые изменения именно в этой ветке движка. Если обновляться, то с нее.

комментариев 0 | оставить комментарий

<< предыдущие 5