Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 17.11.2016 18:11:09

Начал писать Форум для L5.3+ Кто хочет участвовать?

Требования к участию — не задавать очевидных вопросов «как сделать», — то есть хотя бы 2 года уверенного программирования с использованием Лары (Таргетинг L5.3+)

Если будет 2+ человека, то будет паблик на GitLab.com

Уже заложено в Проект (не реализовано):
— Готов каркас пакета, сервис провайдер, пустые модели, базовая архитектура (в голове) по принципу IPB.
— Индексная страница либо список форумов либо объективная статистика по форуму, включая последние регистрации, темы, рейтинги.
— Система прав Forum < Group <<< Permissions
— Подсистема «прочитано» / «новые темы» / «новые комментарии»

После запуска запланированного объёма:
— Upload файлов в сообщения / каменты / посты
— Download-архив
— Фото Галерея
— Личные Сообщения
— Нотификации

Затем:
— Кастомизация внешнего вида
— robots.txt / sitemap.xml для СЕО/

Совсем далеко:
— Массовые действия над пользователями
— Обсудим...

Повторяю, если Вы не уверены в своих силах, то будьте просто наблюдателем.
Жду отклика!

Не в сети

#2 17.11.2016 18:15:26

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

У меня тонна свободного времени smile до +_ февраля... в 2 лица оч даже успеем.

Оч. хотелось бы увидеть фронтэндщика, для проектирования шаблонов и написания js (vue/jquery)

Не в сети

#3 17.11.2016 18:16:14

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

(пусто)

Не в сети

#4 17.11.2016 18:31:38

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

Потом можно подумать и написать простеньки Project Management - то чего в народе не хватает...
Например многоуровневое ToDo
Или сразу замахнуться на Agile/Scrum.

Присоединяйтесь!

Не в сети

#5 17.11.2016 23:14:27

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

  1.  — Система прав Forum < Group <<< Permissions

Не нужно разделение на форум > подфорум > темы, отдельная система ЛС. Более гибкая структура — когда есть сущности и сущность это и форум, и тема, и пост. Это даёт:

  • Простую систему упрвления. Нет прав для форумов, прав для подфорумов, есть просто права и они работают для всего, что есть сущность — будь то диалог в ЛС или тема.
  • Бесконечно вложенную иерархию. Хочешь залепить на главную объявление — создаешь пост. К нему пишут комментарий — вот уже тема. Само объявление — это фактически корневой форум на уровне с обычными форумами с темами. По правам ограничил — только админы могут писать в корень. Всё.
  • ЛС аналогично ограничиваются правами: отправитель выставляет флаг для поста, что его читает такой-то пользователь. И всё.
  • Групповые ЛС. Как? Флаг для поста: читают такие-то пользователи.
  • Простая структура. Есть сущности (entityID, parentEntityID, userID), есть права (ruleID), есть пользователи (userID). Нет forumID, topicID, aclID, privateMessageID, …
  • В комплекте с форумом получаешь всё, что есть «пост» (т.е. CMS). Тут тебе и download-архив, и галерея, и системные страницы-статика.
  • Так как у тебя одна общая сущность, то все эти условные «галереи» получают плюшки всех других типов постов: хочешь добавь сохранение истории правок (лишняя таблица history с historyID, entityID) и будет вики. Хочешь каждому посту прикрути рейтинг. Добавь к посту стиль и получишь стилизацию в духе Хабра (у фирмы своя тема, у темы стили, стили наследуются к потомкам-постам).

В Habravel подобная схема, любой коммент это тот же большой пост, только с выставленным parent, а не null. Он может иметь даже голосования, создание которых в интерфейсе выведено только для корневых статей.

Не в сети

#6 18.11.2016 01:07:56

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

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

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

С точки зрения советов прочёл, учту, но сделаю по своему - охватывающее максимальный рынок хотелок. Хочешь используешь функционал, нет - на нет и суда нет.

Про сущности, открою секрет smile
Частично соглашусь, на форуме есть две сущности - это пост и пользователь. Всё остальное - категории, обвязанные правами доступа ;-) пользователя.

Не в сети

#7 18.11.2016 11:05:49

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

  1. С точки зрения «самописный не буду ставить». А другие бывают? Не вдаваясь в палемику — все проекты и «самописные» и «не самописные» — суть одно и то же. Внутренности разные, а оболочка одна — «для себя сделать так как надо по работе», «если бабла перепадёт — гуд», «если слава будет — шоколад с икрой и без хлеба».

Я согласен, уже после того как отправил сообщение подумал, что «самописный» зря написал, только добавил путаницу.

Главная проблема, почему не хочу ставить ничего нового (написанное кем-то из нас или со стороны) — не уверен в качестве кода. FluxBB ужасный внутри, факт, но я его использовал не один раз и в общем-то испытал временем. Другие варианты (IPB, phpBB) отталкивают своей монструозностью, причём до FluxBB я пользовался именно phpBB.

Твой код я не видел, сказать ничего не могу.

  1. С точки зрения советов прочёл, учту, но сделаю по своему — охватывающее максимальный рынок хотелок. Хочешь используешь функционал, нет — на нет и суда нет.

Я писал не про функционал, а про структуру. «Пост и пользователь» — хорошо, на этом можно реализовать любые «хотелки». Главное не плодить сущностей на каждый случай.

Перенести тему в Laravel 5? Там больше людей.

Да, ещё насчёт фронтенда. Если действительно будет получаться что-то стоящее, то с фронтендом и дизайном я помогу, после НГ у меня будет кое-какое время. Только без Vua, просто jQuery (либо на моём движке).

Не в сети

#8 18.11.2016 12:28:20

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

Когда запощу первые каммиты, посмотришь и решишь. Я по большей степени для себя делаю smile (для себя-любимого самое лучшее), А там видно будет. Захочешь - окей, отлично. Нет, да Бог с тобой! smile

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

Переноси тему.

По фронту. Я пока делаю с перезагрузкой страниц.
Посмотри сюда https://github.com/h-zone/lib-appjs демка тут https://showcase.h-zone.ru/lib-appjs/
Совмещая мой код жс и лару, я полностью вынес UI алертов, диалогов и Ajax конструктор запросов в отдельный _управляемый_ пакет.
По сути Ajax у меня выглядит вот так

var requestPresetGet = {
	method: 'GET',
	preloader: false,
	headers  : {
		'X-CSRF-TOKEN': $( 'meta[name="csrf-token"]' ).attr( 'content' )
	}
},
requestPresetPost = {
	method: 'POST',
	preloader: false,
	headers  : {
		'X-CSRF-TOKEN': $( 'meta[name="csrf-token"]' ).attr( 'content' )
	}
};
$(function ()
{
        App.alert = new App.Alert();
	App.requestGet  = new App.Request( requestPresetGet ),
	App.requestPost = new App.Request( requestPresetPost ),
});

Request перехватывает 3 уровня ошибок: сервера, запроса, и приложения и выплёвывает всё в App.alert

var callback = function( success, result )
{
    if ( success )
    {
        // работаем в result, который структурирован в 2 вариантах
        // 1. { success: true, data: { /*результат работы*/ } }
        // 2. { success: true, html: '/*html string*/' }
    }
},
sendData = { param: 1, another: 'value' }
;
App.requestPost.send( sendData, callback, 'URL' );

Согласись просто до нельзя, по сути работая с однострочным аякс-вызовом smile

Посмотришь на код smile заодно

а если надо сделать запрос аяксом без обработки ответа, то вообще полстроки

App.requestGet.send( {}, null, 'URL/vote/например' );

Изменено hzone (18.11.2016 12:32:22)

Не в сети

#9 18.11.2016 12:30:11

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

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

Не в сети

#10 18.11.2016 13:47:35

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

По сущностям мы оба были не правы, Proger.

Уже сейчас вырисовывается следующий комплекс:

1. Пользователь
2. Форум
3. Группа
при этом группа несёт следующие свойства:
- View (войти в форум и увидеть список тем)
- Create (создавать темы/комменты)
- Edit (получить страницу редактирования темы/коммента)
- Save (механизм сохранения темы/коммента)
- Delete (удаление своих тем/комментов)
- Complaint (жалобы на темы/комменты)
- Like (лайки тем/комментов)
4. Тема (с привязкой к форуму)
5. Пост (с привязкой к теме)
6. Теги темы (с облаком тегов на индексе)
7. Жалобы (сохраняем IP и/или user_id чтобы не дублировали)
8. Лайки (сохраняем IP и/или user_id чтобы не спамили)

То есть обвязка Пользователь/Форум/Группа/Пост будет обрастать сервисными сущностями и механизмами управления контентом.
И я до сих пор в раздумьях между Web 2.0 и Админкой для форума.

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

Изменено hzone (18.11.2016 13:53:56)

Не в сети

#11 18.11.2016 13:48:44

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

9. Рейтинги на основе активности пользователей в отношении тем. Просмотры, Повторные просмотры, Лайки, Входы извне сайта, Шаринг вовне

Изменено hzone (18.11.2016 13:54:02)

Не в сети

#12 18.11.2016 13:57:56

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

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

$Companies = Commpaines::where('active', '=' true)->with('city')->get();

Где компаний тотальнго в таблице 4000
а городов тотально в таблице 2 700 000.
= Встанет по нехватке памяти. Я на этой почве говорил с производителями Совы. Да, признали проблему в сове. И всё. Ничего.

Так вот. Тут как раз деление информации на данные и оперирование данными для построения вариативной информации.
Почти нормализация данных.

Изменено hzone (18.11.2016 14:00:45)

Не в сети

#13 18.11.2016 17:19:34

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

hzone, хочешь написать что-то полезное, пиши что-то в духе форума на laracasts.com без оглядки на IPB, PHPBB и прочие. Современный форум должен быть простым и легким, с активным использованием AJAX.

Не в сети

#14 18.11.2016 21:10:04

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

AlexeyMezenin пишет:

hzone, хочешь написать что-то полезное, пиши что-то в духе форума на laracasts.com без оглядки на IPB, PHPBB и прочие. Современный форум должен быть простым и легким, с активным использованием AJAX.

Посмотрим.
Я никогда не оглядываюсь "как у других" и всем мозги на эту тему промываю.
Ибо получается именно "как у других". Не люблю клонировать ни морду ни жопу.
Сейчас пишу от теста (в одно лицо и тесты не нужны smile) - есть задача показать список форумов - пишем, топиков форума - пишем.
Понемногу двигаюсь.
Думаю, как смогу отобразить полную цепочку от списка форумов до просмотра темы с постами, так и закомичу.
Вот если б кто взялся интегрировать в админку овла или вояжера, то цены б небыло человеку (целовать не буду!)... Ну или писать собственный интерфейс.

Не в сети

#15 18.11.2016 21:41:49

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

  1. По сущностям мы оба были не правы, Proger.

Зачем разделение-то? В чём польза?

Говорить о нагрузке на БД в данном ключе бесполезно, т.к., во-первых, все форумы интернета на твоем движке может никогда не наберут больше пары тысяч постов, а, во-вторых, решить проблему с БД легко более мощным железом. Это тебе не ORDER BY RAND, где один запрос может вешать систему, здесь вся система одинаково нагруженна.

Зато очень много теряется в гибкости. Мало чем отличается от «yet another forum», ещё один нонейм.

  1. И я до сих пор в раздумьях между Web 2.0 и Админкой для форума.

«Веб 2.0» делается просто: вначале суровый no-JS сайт, дальше вытаскивается наружу API и к нему вешается jQuery. В итоге получаешь и SEO-friendly ресурс, и вебдванольный. Из-за четкого разделения по областям работать легче, т.к. не надо оглядываться на фронтенд, он просто довесок.

Не в сети

#16 18.11.2016 21:43:12

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

пользу я описал - в разделении нагрузки на таблицы бд

Не в сети

#17 18.11.2016 21:44:37

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

  1. пользу я описал — в разделении нагрузки на таблицы бд

Я тоже написал, что заниматься предоптимизацией глупо.

Не в сети

#18 18.11.2016 21:47:27

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

Глупо начинать с оптимизации без предварительной нормализации.
Почему? Потому что оптимизированные модели (таблицы/данные) рефакторить катастрофически сложно.
Однако нормализованные данные легко подвергаются модифицированию без цепной реации развала всей бизнес-логики.

Не в сети

#19 18.11.2016 22:10:54

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

Ну, у тебя возможность спроектировать всю систему сразу, так как в создании форума нет ничего нового, R&D не нужно, риски минимальны. При таком раскладе что-либо изменять потребуется нескоро, если вообще.

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

У тебя есть:

  1. 6. Теги темы (с облаком тегов на индексе)

Как в твоей схеме давать теги постам? Или группам?

Как добавлять рейтинг и темам, и отдельным постам (аналог SO)?

Как работают права? Отдельные категории для форумов, для постов, для галереи?

Все эти вопросы можно решить добавлением поля «тип», в дополнение к основному ID. Но тогда придётся прощаться с проверкой данных по FK, могут быть несоответствия (тип изменили, ID нет), работать сложнее, когда ID это не весь идентификатор.

Не в сети

#20 18.11.2016 22:29:22

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

Теги: многое ко многому. Возможно отдельным пакетом. Пока не до него.

Как давать - интересный вопрос smile Из разряда... Как пользоваться Экселем.

Рейтинг: я написал же, - расчитывается на основе активности пользователей.
Оба варианта реализовывать буду, на базе выбора от конфига.
1. в реальном времени пересчёт и сохранение
2. по крону в случае если нагрузка уже высокая.

Права я тоже отписал. Уточню:
По умолчанию всё запрещено.
Права несёт Пользователь посредством присвоения форумной Группы.
Права проверяются в Middleware на конкретное действие от роута (возможно пересмотрю).

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

Хочешь красивые таблицы - помогай, собирай View таблиц. Но сам пойми View только для чтения будет на 99.99%.

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

Не в сети

#21 19.11.2016 11:38:46

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

  1. чем больше полочек будет, тем меньше вероятность получить locked table при чтении на высоких нагрузках.

Теоретически так, а фактически чтение одной таблицы обычно тянет чтения связанных таблиц, так что либо дублирование данных в каждую таблицу (но ты же хочешь нормализации), либо разницы с одной таблицей никакой.

  1. Рейтинг: я написал же, — расчитывается на основе активности пользователей.

Я про рейтинг отдельных постов, а не пользователя. Как на SO: у вопроса есть рейтинг, у поста (как у нас, стрелки снизу), у пользователя. Аналогично у Хабра, три разных рейтинга.

  1. Права проверяются в Middleware на конкретное действие от роута (возможно пересмотрю).

Разные маршруты могут требовать одинаковых прав, а кроме того маршруты могут переименовываться.

  1. Предлагаю пока закрыть палемическую часть вопроса.

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

Впрочем, если ты уже всё решил, то это дело твоё. Если даже я и буду помогать с фронтендом, то структура БД меня не будет волновать. Тебе сейчас главное сделать голый бекенд, без клиентских скриптов.

Не в сети

#22 19.11.2016 12:07:12

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

Я счас наоборот делаю - фронт. Фронт есть "тест", от которого проектируется бд.
Пока только списки вывести хочу, до роуты построить. Дальше буду посмотреть ))

Не в сети

#23 21.11.2016 12:44:05

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

Нужен совет. Комплексный. Без палемики. Попробую все варианты и выбиру наиболее масштабируемый.

Вопрос к изучению.

1. Оптимально вычислять и хранить (не) прочитанные темы.

2. Как будем считать просмотр темы? Просмотр темы влияет на рейтинг (от активности пользователей).
- Считать ли гостя? Засчитывать ли повторы от гостей?
- Считать ли поисковики? Если нет, то надо писать механизм определения поисковика.
- Предполагаю, что просмотр темы зарегистрированного пользовател считать с повторами.

Жду откликов. Обсуждать плюсы и минусы не будем, хорошо? Это отнимет время.

Изменено hzone (21.11.2016 12:59:08)

Не в сети

#24 21.11.2016 12:46:42

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

Условие: Для гостя все темы "прочитанны" либо все темы "новые".

Не в сети

#25 21.11.2016 21:51:46

Re: Начал писать Форум для L5.3+ Кто хочет участвовать?

Есть что показать.
https://github.com/h-zone/laravel-forums-engine
Там же инструкция по установке.

Изменено hzone (21.11.2016 21:55:01)

Не в сети

Подвал раздела