ОсновноеRadiotalkПользовательское
MPCHAT - CMS хостинг чатов для профессионалов
90   •   Посмотреть все темы

Новая система хранения сообщений/комментарий.

 

415
Денис @FeNIX74
Q-Tec, Ну я же говорю не робить. Ошибка? Начинает зависать анкета и не видно сообщений в комментариях.

Код
while(message.search(/\[video\](.*?)\[\/video\]/g)>=0){t=message.split('[video]'); if(t[1]) {t2=t[1].split('[/video]');video_c++; if(t2[0]&&mp.video_max>=video_c) { var ss2009=t2[0].replace("watch?v=", "v/");ss400='src="'+ss2009+'&hl=ru&fs=1"';message=message.replace('[video]'+t2[0]+'[/video]','<embed '+ss400+' type=application/x-shockwave-flash allowscriptaccess=always allowfullscreen=true width=550 height=350></embed>') } else {message=message.replace('[video]'+t2[0]+'[/video]','');}}}

20090
Dimitry @Dimitry
Q-Tec, как и писал, сделать в iframe в другом хтмл файле. На одной странице можно подключить комментарии только 1 раз.
неполучается? давай ссылку хоть где ты сделал и где оно не работает...

Хотя ещё вариант это если ты при переходе в другую вкладку активируешь весь JS код повторно, но предварительно очистив комменты... удачи)

Кстати добавил возможность редактирования, зацените как работает.
**********

20090
Dimitry @Dimitry
Теперь система работает для гостей, гость может точно также авторизоваться, его ник запоминается + есть подписка что это гость.
Т.е. теперь можно полностью заменить гостевую этой системой. Также добавил проверку на бан.
Форма авторизации теперь автоматически предлагает авторизоваться гостям только в том случае, если текущая настройка комментариев поддерживает гостей.
Если не поддержиает, то авторизоваться может только зарегистрированный. Кроме этого передаюстя новые параметры writable, readable, isguest
Тем кто тестирует нужно обновить api.js и обновить в textarea синее:
<textarea name=text wrap=virtual rows=5 style="width:98%;" onclick="mp_authform(1);" onkeypress="if(mp.enabletrans) return mp_autotrans(this,event);" onkeydown="if(event.ctrlKey && event.altKey) {mp_checktrans(); return false;}"></textarea>

3910
Дмитрий @Q-Tec
Снова я :-)
Комментарии работают нормально, пока я ничего не хорошего не заметил. Насчёт внутреннего кода не знаю, естественно наверное его там ещё дорабатывать нужно. Не тестировал ещё в галерее.
Насчёт блогов, раз это блоги, то наверное нужно сделать как в магазине при создании товара (записи в нашем случае) указывать категорию записи, и выводить её не селектом конечно, а ссылкой с количеством записей в категории ( Заметки [5]; Общий [42] и так далее )
Желательно конечно как-то вывести это в информер, что бы можно было вывести последние записи в блогах (по типу форума - последние темы) на главной или ещё где-либо.

Естественно это пока что только пожелания.

Отредактировано Q-Tec - 11.10.2015
17
Grinsens @Grinsens
Желательно конечно как-то вывести это в информер, что бы можно было вывести последние записи в блогах

плюсую, было бы очень полезно

2970
удалён @Foggy
ох, блоги...
а я бы хотел ещё помимо блога каждого пользователя, вести блог клана.

и да, нужны просто не категории, а теги, кликнув по которым можно открыть все записи с таким тегом. т.е. статья в блоге не принадлежит категории.
но когда отмечаешь статью тегами, список всё равно выводится (Войны кланов [5]; Общий [42]; Ритуалы [12];)
и чтоб можно было создать любой тег, введя его через запятую к любой записи в поле ввода тегов. а удалить в разделе управления тегами.

3910
Дмитрий @Q-Tec
Foggy, теги это та же категория как бы, я так думаю.. можно или теги или категории, конечно всё сразу, было бы идеально...
Блог клана? То есть на странице самого клана? Это конечно я думаю может сделать любой выкупленный чат, а вот в обычных, даже редактирования страницы кланов нет :-(
Всё это конечно на волю Дмитрия, захочет не захочет, я не думаю, что это отнимет много времени, два дополнительных поля и пару десятков строк кода :-)

Отредактировано Q-Tec - 11.10.2015
2970
удалён @Foggy
Q-Tec, по структуре базы данных не та же. и теги, которые я описал, избавляют от необходимости категорий.

3910
Дмитрий @Q-Tec
Foggy, тогда тем более пускай лучше теги будут

20090
Dimitry @Dimitry
Реализация тегов намного сложнее, а вот категории сделать будет не так сложно.
Т.е. примерно в таком стиле как сделано тут: https://vmeste.eu/?act=blogs

Если точнее, при написании комментария в блоге, можно указать необязательный параметр категорию в виде текста. (или выбрать из существующих)
При совпадении названий будут группировки, также можно группировать по месяцам, чтобы отобразить хронологию.
Конечно всё это далеко выходит за рамки обычной системы комметариев, но сделать возможно.
Возьму на заметку на будущее 😀

20090
Dimitry @Dimitry
Доработана совместимость с jQuery

Теперь подключается только api.js библиотека, которая подключает JSLib.js, которая в свою очередь либо заменяет jQuery, либо просто дополняет функционал $ при отсутствии jQuery.

Рассмотрим пример:
<base href="./">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="//mpchat.com/chat/api.js?v2"></script>

<base href="./"> - рекомендуется только если вы подключаете api на HTML странице вида page.html, по умолчанию больше не используется.
В данном случае, если вы используете jQuery, достаточно подключить его до api.js синей строчкой, при этом ничего ни где не сломается и noConflicts не нужен.


>> В JSLib доработана функция модальных окон, теперь всякие паддинги и неверные скролы работают правильно.

2970
удалён @Foggy
Дим, я всё никак не пойму, зачем ты пилишь для проекта свой jquery (JSLib). Это, конечно, круто, что ты совместимость даже запилил, но можно же взять jquery и пересобрать его с указанием только нужных модулей, а не переписывать на свои. Или, если уж так жутко нужны свои методы (хотя есть jquery плагины), то можно дописать свои модули jquery и собирать jquery со своими модулями.
[spoiler=Делается всего в несколько шагов:]
1. Качается jquery из ********** в любую папку.
2. В консоли перемещаешься в эту папку
cd jquery
3. Если нет ноды локально, то ********** и ставишь.
4. В консоли запускаешь команду установки npm-пакетов в папку
npm i
5. И собираешь свою сборку с ТОЛЬКО НУЖНЫМИ частями jquery. Вот ********** из их документации:
grunt custom:-ajax,-css,-deprecated,-dimensions,-effects,-event/alias,-offset,-wrap
Если что-то не срабатывает, у них в доках есть **********.
[/spoiler]
[spoiler=Почему я не первый раз это повторяю?]
1. Это всё уже написано. Писать свой велосипед прикольно, но зачем?
2. Есть куча модулей.
3. Любые плагины, написанные под jquery будут работать со сборкой, но не будут с твоей библиотекой.
4. Есть тесты. То есть при изменении какого-либо раздела, если начнёшь переписывать их jquery на свой, не допустишь ошибку. Запускаешь grunt build, а оно тебе говорит, что тест не пройден, потому что у тебя ошибка в строке N. Это же прекрасно!
5. Писать плагины под jquery - легко, а значит любая твоя библиотека, написанная под jquery будет работать на любых сайтах, а не только там, где есть твоя JSLib. Те же модальные окна, то же api.js.
[/spoiler]
Чтоб ты понимал: я не помешать тебе пытаюсь, а, наоборот, помочь тебе быстрей писать код за счёт чужих разработок. а-то ты вечно мои вопросы как вражеские трактуешь х)

20090
Dimitry @Dimitry
Ну во первых - самое важное, когда я разрабатывал эту либу я многому научился.
Во вторых, дефолтный не минимизированный jQuery весит 280кб -> 90кб, а моя версия 13кб -> ? к тому же с нужными мне модулями включая модальные окна. Конечно все функции не отражают полные опции jQuery, но мне текущего хватает.
По поводу плагинов наверное ты не прав, плагины точно также добавляются в мою либу как и в jQuery, и сейчас модальные окна и ещё пару функций добавлены как плагины. Другой вопрос что плагины для jQuery через мою либу работать не будут лишь потому, что может не хватать какой либо функции.

Скажем так, до написания либы мои знания и понимание JS были в 2 раза меньше.
Согласен что при написании уходит как бы лишнее время, а если брать тесты то это ещё больше времени, но для меня это способ учиться, когда я сам что-то напишу, я это не забуду, а если прочту, то могу забыть 😀

Теперь JSLib можно расценивать как прослойку, которая везде заменяет основной функционал jQuery для моих скриптов, а значит что мне не требуется подключать дополнительные 90кб+ и работает оно всё вполне не плохо, даже IE8+.

2970
удалён @Foggy
Не, скил написать свой jquery - офигенный скил. Тут я не то что против, я даже за. Я тоже свой писал. Но просто ради эксперимента попробуй сделать свою сборку jquery только с теми модулями, которые есть в твоей либе. Может будет 8кб ;-)

20090
Dimitry @Dimitry
Я периодически поглядываю как и что сделано в сурсах жквери, и скажу что один селектор со своими фичами и фильтрами там может быть порядка 50кб неминимизированно ))) Он удобен и универсален, но в таком виде он мне не нужен, ограничусь querySelectorAll.

2970
удалён @Foggy
а как ты вешаешь одинаковый обработчик на несколько эл-тов с одним классом? проходишься по всем эл-там списка querySelectorAll? типа так for(i=0;i< querySelectorAll('.image').length;i++)? или, если не возникает такой необходимости, то как вообще вешаешь обработчики?

20090
Dimitry @Dimitry
А в чём проблема, примерно так и вешаю, один только минус - delegate/live у меня нет.

2970
удалён @Foggy
Лично мне не нравится писать к примеру так

var images = querySelectorAll('.gallery .image')[0];
for(i=0;i<images.length;i++) {
images[i].addEventListener('click', function () {
this.preventNode.click();
});
}

1. создаётся стопицот обработчиков клика. на больших страницах и особенно там, где этих .images много, это нормально так нагружает браузер
2. приходится перебирать каждый элемент. браузер это делает заметно дольше.
3. да и строк больше, чем хотелось бы. вроде элементарная хрень, а делается так сложно.

к примеру так удобнее:
var gallery = querySelector('.gallery');
gallery.addEventListener('click', function() {
if(!e.target.classList.contains('image')) return;
this.preventNode.click();
});

но не всегда элементы в одном контейнере, поэтому иногда приходится пользоваться верхним решением. и jQuery по сути всегда использует верхнее + live, если писать через on. Мне всё это не особо нравится. Ты как считаешь? И как делаешь?

20090
Dimitry @Dimitry
да я пробовал на днях сделать delegate/live, какой то кривой он у меня вышел, поэтому решил обойтись без него...
а делается оно по хитрому, на body вешаются все события, и потом различные фильтры на боди начинают фильтровать уже все элементы что также получают onclick, тут скила не хватило уже, багов было море, решил отказаться от такого 😀
Причём on() вроде как по новой системе работает, а я про live/delegate.

3910
Дмитрий @Q-Tec
Так тут что то про селекторы говорится, наверное категории будут, не? xD
Кстати думал впихнуть систему комментариев в кланы.. не хочет заводится как не тычься, а должно? 😀

Отредактировано Q-Tec - 27.10.2015