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

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

 

20090
Dimitry @Dimitry
Назревает создание новой системы хранения сообщений/комментариев (не сообщений в чате)
(это сообщение периодически обновляется)

ИДЕЯ СОЗДАНИЯ

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

Старая идея перенести их в базу данных и расширить функционал со временем начинает быть интересной.
И так что можно сделать, как это будет и какие в этом плюсы:
- создать таблицу в базе данных comments для всех текстовых сообщений (кроме сообщений чата)
- за счёт этого можно убрать лишний хлам sys файлов из чата, а разработку сделать более гибкой
- данную таблицу можно использовать для гостевой, для форума, для коментариев к галереи и в анкетах, а также ведение личных блогов/записных книжек
- обрабатывать выводить все сообщения будет один скрипт comments.php который может просто вставляться в шаблон нужного скрипта через <script> (это ещё нужно обдумать в плане прав)
- комментарии можно будет загружать в любом файле, в любом виде, с сортировкой и так далее
- в базе каждое сообщение будет иметь свой уникальный ID, не стоит делать на каждый скрипт отдельную таблицу, структура хранения везде идентична
- можно будет использовать скрипт комментарий на других сайтах, аля вконтакте (также нужно продумать)
- так как система будет очень структурирована, то будет намного меньше ошибок при сортировке, удалении, редактировании, выборке.
- кроме этого можно сделать полноценный поиск по комментариям
- и конечно же админский интерфейс где можно видеть все сообщения со всех скриптов в одном месте, и одним кликом удалять спам и плохие сообщения, а не лазить по всему чату в поисках злого контента...

На этом пока всё, пишите ваши мысли и предложения по данной идее.
Создание данной системы займёт не мало времени, а конвертация старого контента в базу ещё больше, и объём работ очень сложно оценить. (ориентировочно месяц)
Так что если после обсуждения готовы скинуться на данную фишку, то начну разработку в ближайшее время 😉


АКТУАЛЬНАЯ ВЕРСИЯ ДЛЯ ТЕСТИРОВАНИЯ
Как это выглядит у меня вместо гостевой книги:
**********

1. заходим в админку, Управление -> комментарии
2. добавляем приложение например gb
3. создаём таблицу в базе нажав на ссылку пересоздать
4. размещаем код на любой html / inc странице - код указан внизу


Описание системы

<script src="//mpchat.com/chat/api.js?v2"></script> - api функции которые могут стать базовой библиотекой для вашего чата, можно скачать себе и менять как угодно. Также подключает мини jQuery под названием JSLib.js, который в свою очередь либо заменяет jQuery, либо просто дополняет функционал $ при отсутствии jQuery. Если вы используете jQuery, достаточно подключить его до api.js, при этом ничего ни где не сломается и noConflicts не нужен.
<base href="./"> - необходимо добавить если комментарии подключаются в .html файле, по умолчанию отсутствует

Настройки коментариев указаны ниже в коде:
window.mp={}; - глобальный объект мпчата в котором хранятся все актуальные данные и настройки
mp.debug=0; - включения режима отладки
mp.type='gb'; - тип приложения
mp.sort='desc'; сортировка сообщений в обратном порядке
mp.limit=5; порции вывода сообщений
mp.script='?inc=comments'; - API скрипт работы с комментариями, возвращает JSON
mp.commentsok={}; - загруженные сообщения храним тут
Всё работает в динамическом режиме без перезагрузок страницы.

Пример кода:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="style.css">
[color=blue]<script src="//mpchat.com/chat/api.js?v2"></script>[/color]
</head>
<body class=gb-body>

<script>
/* После загрузки DHTML страницы */
$(function () {
/* Глобальные парамметры mp */
if(!window.mp) window.mp={};
mp.debug=1; mp.type='gb'; mp.sort='desc'; mp.limit=5; mp.script='?inc=comments'; mp.commentsok={};
/* Загрузка данных и последних сообщений */
$.ajax({url:mp.script, dataType:'json', data:'type='+mp.type+'&sort='+mp.sort+'&limit='+mp.limit,
success:function(data) {
if(data.disalow) return;
if(data.error) mp_err(data.error);
for(var k in data) {mp[k]=data[k];
if(mp.debug) {if(typeof(data[k])=='object') {for (var k1 in data[k]) $.debug(k1+'='+data[k][k1]);} else $.debug(k+'='+data[k]);}
}
mp_authview();
$('#tags').html(mp.tags);
if(data.xcode && !data.myid) $('#code').html('<img src=index.php?inc=code title="для незарегистрированных" align=absmiddle> <input type=text name=code class=text size=10>');
if(data.count==mp.limit) $('#loadmore').html('<input type=button value="Загрузить ещё" onclick="mp_loadmore();">');
for(var k in data.comments) {mp_addcomment(data.comments[k]); mp.lastid=data.comments[k].id;}
}
});
});
</script>

<div id=commentsdiv align=center>
<b>Гостевая книга</b><br><br>
<div style='width:510px;'>
<form id=commentsform action='' onsubmit='this.action=mp.script; this.type.value=mp.type; $("#commentsform").ajaxForm(mp_sendcomment); return false;'>
<table width='100%'>
<tr><td class=title><a name=sendmess></a>Добавить сообщение</td></tr>
<tr><td><input type=hidden name=type value=''><div id=authorized></div></td></tr>
<tr><td>
<div id=tags></div><style>#tags input {padding-left:4px; padding-right:4px;}</style>
<div><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></div>
<div id=smiles></div>
<div align=center><span id=code></span> <input type=submit name=send value='Отправить сообщение' class=ok></div>
</td></tr>
</table><br>
</form>
<div id=comments></div>
<div id=loadmore></div>
</div>
</div>

</body>
</html>

2615
Сергей @Pegass
табличка
ID | date_time | autor_ID | script_name | msg| autor IP

с этим понятно, а вот что делать с остальными данными, учитывая что всё будет в одной таблице, а именно
1) удалять данные из базы или помечать как удалённые?
2) ФОРУМ
- ID форума
- топик
- отредактировано(когда кем)
3)ГАЛЕРЕЯ
- к какому фото
- оценка
- отредактировано(когда кем)
4)АНКЕТЫ
- ID анкеты
- права на чтение
5)БЛОГИ
ну тут ХЗ что может понадобиться

ЗЫ я за, стандартный стартовый лот 10евро

Отредактировано Pegass - 09.10.2013
3910
Дмитрий @Q-Tec
Ну, а что... Как я понял, к анкетам не прикрутить, выводит сообщения не только в чьей анкете писал но и во всех. Блог для пользователей из этого тоже не сделать...
Вставить вместо обычной системы в форуме, галерее, можно конечно, даже с одной стороны удобно, что все настройки в одном файле api.js но нет пока времени переделывать да и прокатит ли это?

Если логично подумать, поставлю я в форум, и как оно будет определять к какой теме было этот сообщение? Если выводятся Все сообщения

20090
Dimitry @Dimitry
Можно сделать так чтобы например id был user* - профиль или blog* блог или gallery* фотки
Тогда например для профиля будет в виде user123, где 123 ID юзера.
И сделать так чтоб юзер 123 был модератором)
Для форума конечно всё сложнее, поэтому сначала бы простые вещи попробовать.
Это пока моя идея как использовать, но в целом ещё не продумана вся система с правами.

3910
Дмитрий @Q-Tec
Вот да, к примеру сделать селектор выбора, многозадачные комментарии (анкета, блог) или однозначные (гостевая..)
Конечно лучше бы ещё и сами пользователи могли это создавать блог и немного управлять - разрешить\запретить комментарии в анкете, блоге
А вообще, форум и галерея, в принципе не так важно, как я думаю.

20090
Dimitry @Dimitry
Возможно теперь будет интереснее, добавлены новые опции:
- разрешить удаление своих сообщений
- разрешить числа после имени приложения, например: user123, blog123
- назначить модератора по числу, например для комментариев с типом: user123 - пользователь #123 будет модератором

Пример моих настроек:
gb: guestread=1 guestpost=0 mypostdel=1 allownum=0 moderatornum=0 moderators=2002demon
user: guestread=1 guestpost=0 mypostdel=0 allownum=1 moderatornum=1 moderators=
g: guestread=1 guestpost=0 mypostdel=0 allownum=1 moderatornum=0 moderators=

Для галлереи я взял просто "g" так как общая длинна типа в базе 11 символов, а для фотки идентификаторы 10 символов, с цифрами получаем что-то типо: g1333121689

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


Пример интеграции в галлерею, к сожалению оценки полетели прахом, их вообще лучше заменить на лайки 😀
**********

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

Отредактировано Q-Tec - 30.09.2015
415
Денис @FeNIX74
Делаю в анкете так... и при нажатии добавить выкидывает на главную стр чата..
Показать текст

3910
Дмитрий @Q-Tec
FeNIX74 пишет:

Делаю в анкете так... и при нажатии добавить выкидывает на главную стр чата..
Показать текст

https://vmeste.eu/forum?pid=322891#p322891 не?

415
Денис @FeNIX74
Q-Tec, Да, использую ********** и что теперь делать если уберу эту библиотеку то некоторые фишки в моей анке не будут робить(((

3910
Дмитрий @Q-Tec
FeNIX74 пишет:

Q-Tec, Да, использую ********** и что теперь делать если уберу эту библиотеку то некоторые фишки в моей анке не будут робить(((

https://vmeste.eu/forum?pid=322891#p322891

читай всё от этой ссылки 😒

415
Денис @FeNIX74
Q-Tec, Оп.. Решил проблему.

Но теперь вопрос можно ли использовать эти комментарии как стена юзера? Тобишь чтоб у каждого пользв. была своя база комментариев!

20090
Dimitry @Dimitry
Для этого и делалось, причём каждый будет на своей стене модератор.

Вот такие настройки в главной админке:
user: guestread=1 guestpost=0 mypostdel=0 allownum=1 moderatornum=1 moderators=

В шаблоне анкеты уже делается так:
mp.type='user%userid%';


PS> а вот с жквери надо бы тоже придумать что-то чтобы не конфликтило))

2970
удалён @Foggy
Дима, поделись хоть всем этим, что в выкупленные чаты добавлять?

20090
Dimitry @Dimitry
Foggy пишет:

Дима, поделись хоть всем этим, что в выкупленные чаты добавлять?

php сильно недоработан, когда доработаю хоть немного, то само собой.

3910
Дмитрий @Q-Tec
Как комментарии для анкет , всё окей, вроде.. отображается теперь нормально
А если использовать блог сразу в анкете, то наверное надо как-то запретить писать туда другим людям? (думаю можно решить всё это через field в анкете, путём скрытия поля для ввода для остальных кроме самого пользователя)
Если думаешь делать в галерее лайки, сделай и для записей


Идём далее.. У меня анкета построена на "табах". Мысль была следующая, в одной вкладке, комментарии, в другой блог пользователя. (нужна переменная количества записей)
Всё поставилось, но при вводе сообщения на странице Блога и его отправке оно отправляется в Комментарии. Видно из-за одного ID полей, так же и BB коды, вставляешь во вкладку Блога, а вставляется во вкладку Комментариев...
Думаю это наверное можно исправить самому? Или менять ID в зависимости от имени приложения? Это можно считать багом? 😀


Запланировано ли изменения своих сообщений и возможность вывода всех комментариев, что есть в системе чата на одну страницу? (как бы получится лента комментариев или записей из блогов на одной странице, что бы легче было следить за обновлениями, получится по типу ленты в ВК или Фейсе. Ведь удобно, не правда ли?)


Если ещё короче то:
1. Выдавать ID для формы ввода сообщений и формы вывода сообщений, если две формы комментариев на странице - конфликт.
2. Отключать возможность комментирования анкет, записей в блоге для пользователя.
3. Система лайков для галереи так же бы и подошла для всех записей
4. Редактирование своих сообщений?
5. Скрипт для вывода Всех записей пользователей на одну страницу
6. Переменная для количества записей

У меня пока всё..

Отредактировано Q-Tec - 01.10.2015
20090
Dimitry @Dimitry
jQuery, Для совместимости с jQuery вынес функцию модальных окон в api мпчата, теперь достаточно подключать или jQuery или JSLib.

FeNIX74, что за фукнция такая раскажи подробнее, какой то странный код. Вроде для ютуба, но что-то не то)

Q-Tec,
1. Выдавать ID для формы ввода сообщений и формы вывода сообщений, если две формы комментариев на странице - конфликт.
- на текущей системе всё равно возникнут проблемы, предлагаю засунуть блоги в другой файл, а во вкладку вставить iframe.

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

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

4. Редактирование своих сообщений?
- в плане, также с настройкой прав

5. Скрипт для вывода Всех записей пользователей на одну страницу
- указываешь limit=100, будет тебе 100 последних если мало 😀

6. Переменная для количества записей
- добавил: data.allcount или mp.allcount

415
Денис @FeNIX74
Dimitry, Это для видео с ютуба. Делалось для форума. Показалось вроде как и для комментарий подойдет!

3910
Дмитрий @Q-Tec
FeNIX74 пишет:

Dimitry, Это для видео с ютуба. Делалось для форума. Показалось вроде как и для комментарий подойдет!

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

3910
Дмитрий @Q-Tec
Dimitry,
1. Выдавать ID для формы ввода сообщений и формы вывода сообщений, если две формы комментариев на странице - конфликт.
- на текущей системе всё равно возникнут проблемы, предлагаю засунуть блоги в другой файл, а во вкладку вставить iframe.
Iframe ? Ухххх, гадость какая)) и не совсем понял как это сделать. Тыкал я и так, тыкал я и сяк, но черещ iframe ничего не вышло

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

Понятное дело, это не первостепенная функция 😀

4. Редактирование своих сообщений?
- в плане, также с настройкой прав

Ждёмс..

5. Скрипт для вывода Всех записей пользователей на одну страницу
- указываешь limit=100, будет тебе 100 последних если мало 😀

Я имел введу, на отдельной странице вообще, к примеру вынести скрипт на страницу feed.html и на ней будут выводится Все сообщения пользователей, будь то в анкете или в блоге

6. Переменная для количества записей
- добавил: data.allcount или mp.allcount

Спасибо! Но я так понял к сожалению её нельзя вынести из api.js, я думал в саму в анкету вынести, но тоже конечно не первостепенно

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