Всем привет! Коротко расскажу что удалось сделать за сегодняшние 24 часа. Значительно прокачались чат-комнаты. Теперь можно приглашать пользователей в комнаты, в том числе и приватные. Если вы кого-то пригласите в приватный чат, пользователь сможет его просматривать даже пока не вступил в него. Если напишет при этом хоть одно сообщение, сразу зачислится в эту комнату (при чем автоматически сгорит приглашение и отметится уведомление). Если пользователь покинет приватную комнату, ему опять понадобится приглашение. Еще важный момент: приглашать может любой участник комнаты, даже если это приватная комната. Если кто-то в ней есть, значит он может приглашать другого. Поправка: есть пользователь приглашен в комнату, он еще не может никого пригласить, надо сначала вступить в комнату. В публичные комнаты можно вступать самостоятельно без приглашения. Но все равно после вступления можно отправлять приглашения другим пользователям. Из всех комнат можно самостоятельно уйти (кроме как из тех, что вы создали сами). Уведомления на почту пока не отправляются, на это стоит задача. Чуть позже сделаю. Но зайдя на сайт (или находясь на нем), приглашенный пользователь не пропустит приглашение, так как есть уведомления на странице. https://youtu.be/uvXQoelJUFg Кстати, попробуйте сами поиск пользователей для приглашения в чат. Это довольно мощный инструмент, который позволяет не только искать по имени/логину/емейлу, но и в списке выводит пользователя с иконкой. http://joxi.ru/8Anz5NMcjJbE1A А когда пользователя выбираешь, то появляется кнопка для перехода в профиль пользователя http://joxi.ru/52anNeOi4z8QVA Еще можно выводить сразу кнопку для добавления объекта. Здесь это не используется и не нужно, но при работе с другими справочниками вполне может быть (когда выбираешь что-то, но не знаешь еще есть оно или нет, и в итоге можно принять решение, что такого нет и надо создать. Жмем кнопку и переходим к созданию объекта сразу с нужными параметрами (к примеру, если это дочерняя компания, то сразу будет указана родительская)). Вот так это выглядит http://joxi.ru/L21WpJ8I8Me3gr Этот компонент входит в состав @prisma-cms/front. Сегодня добавил. А еще добавил компонент @prisma-cms/resource. Он пока особого функционала не несет, но в дальнейшем будет развиваться. Сейчас его задача - передавать готовые запросы для ресурсов (документов). Потом вот так вот в пару строк добавляете его контексты и все, можно документы получать из любого положения, получив нужные запросы. Здесь на ресурсах сделаны блоги, топики и комментарии. UPD: Еще была добавлена функция автоматической отметки сообщений о прочтении. Имейте ввиду, что если страница с чатом у вас открыта и прилетят в фоне новые сообщения и отобразятся на странице, то уведомления о новых сообщениях в шапке удалятся автоматически, так что если смотрите только на колокольчик, будьте все-таки чуть-внимательней. Позже этот механизм будет чуть улучшен с учетом текущей вкладки пользователя.
Всем привет! Сегодняшний топик наверняка будет интересен тем, что пробует себя в javascript. Сегодня я довольно просто и на примерах покажу из чего состоит сайт MODX-Клуба, какие технологии применяются, как проблемы решаются и что нас ожидает в ближайшем будущем. Если вы следили за изменениями в последние месяца три, то наверняка обратили внимание, что обновления на сайте появляются как бы внезапно. Что называется "никогда такого не было и вот опять". В ноябре сайт мигрирует на связку MODX+JS, а через 4 дня сайт уже полностью на JS, и в тот же день еще обновления прилетают. Дальше больше: вводится управление проектами, серия мелких и крупных багфиксов, а потом еще и блокчейн. И все это за довольно короткий срок в 3 месяца. И знаете что еще интересно? Это не внедрение готовых технологий. @prisma-cms разрабатывается в процессе, после чего новый функционал добавляется на сайт Клуба. Плюс к этому у меня есть еще и параллельные задачи. Когда же я все это успеваю делать? А здесь секрет простой: просто работайте по 30 часов в сутки :))) Шучу :) Чаще чем через день не надо так)) А если серьезно, то я бы сказал так: перед этим было почти два года исследований всевозможных новейших технологий из мира JS и на выходе получилась весьма мощная модульная система, которая и позволяем на ее основе выполнять такие большие объемы работы и не закопаться. К слову, если вы не читали мою заметку Разработка на javascript или как я до этого докатился, советую. Там дополнительно развернут мой взгляд на мир JS. Так в чем же суть модульности этой @prisma-cms? Смотрите, в большинстве случаев, когда вы разрабатываете сайт или какой-то веб-сервис, если это у вас комплексная программерская работа, то в большинстве случаев у вас основная работа делится на две больших задачи: 1. Разработка бэкэнда (проектирование базы данных, написание запросов к БД и прочей необходимой логики). Это суть обеспечение механизма управления информацией (ведь документы, заказы, пользователи и т.п. - это же информация). 2. Разработка фронтэнда (то есть конечная шаблонизация, оформление и т.п.). Это суть отображения информации (то есть фильтрация, вывод и в довесок какие-нибудь пользовательские функции типа оформления заказа). Сейчас еще принято выделять миддл (middle), то есть что-то среднее, связующее между этими двумя областями (как правило в виде API, микросервисов и т.п.), но мы все же больше сейчас сосредоточимся на первых двух областях. Так вот, @prisma-cms - это набор двух типов модулей. Одни рассчитаны больше для бэкэнда, а другие для фронтэнда. "Больше" - потому что здесь грани особо нет, и там и там используется JS, но все-таки предназначение модулей разное, так что я их выделяю в два отдельных класса. prisma-modules Те, что работают на сервере, у меня исторически называется модулями. У каждого модуля по-хорошему должен быть свой фронт-брат, но это не обязательно. Например, @prisma-cms/upload-module добавляет схему для загрузки и хранения файлов. По сути он создает только одну сущность File, которую видно в схеме сайта. То есть если мы задеплоим только этот модуль, в базе данных у нас будет только одна основная таблица - File (_RelayId не в счет - это техническая таблица). Сейчас такой бэкэнд в состоянии только принимать на загрузку файлы и даже не проверять на пользователей и не указывать владельца файла, потому что сущности User просто нет сейчас. Тем не менее, если поставить и запустить фронтовый модуль @prisma-cms/uploader, то получится через него загружать файлы, с этим он справится. Правда, хоть у нас в нем и есть форма авторизации, мы не сможем ни зарегистрироваться, ни авторизоваться все по той же причине - сущности User нет сейчас. Но если мы установим модуль @prisma-cms/user-module, то база у нас значительно расширится и таблиц у нас прибавится. Вот теперь мы можем и авторизоваться и даже аватарку загрузить. А если я подключу еще и @prisma-cms/cooperation-module, то схема вообще дикая получается, и в базе данных уже 46 таблиц. Тут вам уже и команды, проекты, таймеры, услуги и т.п. И ведь это еще не предел, есть и другие модули. Прелесть здесь в том, что этим модули вполне так суммируются. То есть если взять несколько отдельных модулей, собрать их в кучу в разной последовательности в большинстве случаев даст одинаковый суммарный результат в виде готовой базы данных и API для работы с ней. И устанавливается это все на самом деле порой в считанные минуты. prisma-components По началу во фронтовых компонентах действительно использовался суффикс component, но довольно быстро я от него избавился в целях "а зачем оно нужно? ведь и так понятно". Хотя заготовка для компонентов по прежнему называется component-boilerplate. Компоненты, как я и говорил, отвечают за отображение. При чем эти компоненты на вход могут получать гораздо более богатое API, чем то, на которое они рассчитаны. К примеру, на вход упомянутому @prisma-cms/component-boilerplate можно скормить все API с сайта MODX-Клуба (вот здесь я писал как это делается) и он даже будет позволять авторизоваться и вывести список пользователей. Но в нем нет интерфейсов для отображения списка чатов, сообщений, топиков, комментариев и т.п. И хотя, сами понимаете, с оформлением не все так просто, как с простым обновлением базы данных, здесь тоже не все так безнадежно, и здесь тоже есть некоторые полезные компоненты. К примеру, если взять @prisma-cms/cooperation и скормить ему все то же самое API Клуба, то хоть местами и не в том виде, но все же мы увидим знакомые сущности типа списка проектов или списка таймеров, а диаграма Ганта вообще практически как есть на сайте Клуба размещена. А сегодня на сайт Клуба благополучно прилетели @prisma-cms/society-module и @prisma-cms/society. Вот так вот по кусочкам и собираются конечные проекты. В последующих статьях более подробно расскажу на примере сайта Клуба как это все собирается в кучу. Напомню, что сайт Клуба тоже лежит в открытом доступе. Скоро здесь вообще очень интересный функционал появится, но тсс, это секрет...
Как я и говорил, проблема в том, что у вас передается многоуровневый массив. Но как эту проблему решить с шопкипером, я не знаю, так как перелопачивать его нет никакого желания. Посмотрите, я дописал у вас сниппет arrayToStr Плейсхолдер shkDataArray я устанавливаю в файле core/components/shopkeeper3/model/shopkeeper.class.php на строке 1297. Посмотрите там код. Вот свою переменную я в сниппете смог получить как есть, а вот плейсхолдер data_arr там же в сниппете я получаю Array, то есть где-то он преобразовывается. Сорри, ничем больше не помогу. P.S. в чанке orderDataRow я тоже дописал [[!arrayToStr]], оставил, чтобы вы посмотрели что и как. Удалите что не нужно будет.
Я же говорю, в данной ситуации это не имеет смысла. В плейсхолдер [[+addit_data]] уже прилетает строковый параметр Array. Сделай себе бекап сайта и пришли мне доступ в админку на почту n.lanets@modxclub.ru, я посмотрю что там у тебя происходит.
Смотри, я передаю в корзину маленькую с помощью [[+addit_data:default=—
]] [[!arrayToStr?input=[[+addit_data]]]] [[+addit_data:arrayToStr]] всеми выдает Array, как можно передать параметры не через этот метод?