Куда идем?

Чем больше я работаю с Community Builder, тем больше удивляюсь его возможностям. Однажды, читая комментарии к статье со сравнением Community Builder и JoomSocial, я увидел фразу, которую дословно не помню, но смысл такой: «Если выбирать между JoomSocial и Community Builder, то однозначно Community Builder. Правда искусством этого компонента еще нужно овладеть». Не хочу критиковать JoomSocial, т.к. мало с ним знаком, да и не сомневаюсь, что это достойный компонент, но про то, что весь потенциал Community Builder открывается только после того, как поработаешь с ним некоторое время – это точно.

В этой статье я расскажу про еще одну возможность Community Builder, точнее не про сам компонент, как таковой, а про замечательный плагин к нему, который называется CB MySQL Field Plugin. Благодаря этому плагину в Community Builder появляется возможность выводить в профиль результаты выполнения SQL-запроса к базе данных Joomla. И хоть SQL здесь весьма ограничен, мы можем вывести в профиль значение любого поля БД, а также результат математического вычисления нескольких полей, и самое главное, путем небольших манипуляций, мы можем использовать эти результаты для ранжирования профилей пользователей (см. списки CB).

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

Итак, мы имеем Community Builder и… большое желание сделать что-то необычное, выделяющее наш сайт из общей массы. Кроме того, мы хотим заинтересовать пользователей и дать им нечто особенное. Что – каждый придумает сам, а я лишь расскажу – как.

Прежде всего нам нужно скачать и установить плагин CB MySQL Field Plugin. Т.к. плагин бесплатный и распространяется свободно, это просто. Вот ссылка на страничку каталога расширений Joomla с этим плагином, а вот прямая ссылка на скачивание (не знаю, долго ли она проработает, но все же…). Устанавливается плагин, как и любой другой, через менеджер плагинов  Community Builder (не путайте с менеджером плагинов Joomla).

После установки плагин нужно опубликовать. Заходим в менеджер плагинов Community Builder, находим плагин CB MySQL Field и публикуем его. Все, пол дела сделано, плагин установлен и готов к работе. Осталось разобраться в том, как его использовать.

Использование может у многих вызвать проблемы. Я и сам изначально довольно долго разбирался в нем. Прежде всего, нам нужно создать новое поле, в которое мы будем выводить результаты запроса. Делается это через менеджер полей Community Builder, путем нажатия кнопки «New Field».

Далее можно заметить, что в списке выбора типа поля, появился вариант «MySQL field».

MySQL Field Plugin

Он-то нам и нужен. Выбираем этот тип и видим появившиеся параметры поля:

MySQL Field Plugin

Это то место, где мы будем формировать запрос к базе данных. Разберем все опции внимательно и подробно:

– Result Type (тип результата) – при выполнении SQL-запроса, мы можем получить как единичный результат, так и серию значений, скажем, номера всех пользователей, год рождения которых с 1985 по 1995. Тут все зависит от того, что мы рассчитываем получить. Если единичный результат, то выбираем Single, если множественный – Multiple. При этом в зависимости от типа результата меняются дальнейшие опции, точнее для множественного типа добавляется опция «Add Delimiter». Подробнее о ней написано ниже.

Далее мы начинаем формировать непосредственно SQL-запрос. Для людей, знакомых с языком SQL  это не составит труда, а вот те, кто не сталкивался с ним, могут застопориться. Поэтому коротко расскажу, что здесь к чему.

Итак, наша цель – выбрать из базы данных определенные данные. Для того, чтобы сделать это, нужно ответить на 3 основных вопроса:

  1. Что выбирать? (SELECT)
  2. Из чего выбирать? (FROM)
  3. Как выбирать? (WHERE)

В скобочках я написал основные операторы SQL, ответственные за каждый из вопросов.

Теперь подробнее.

1) Как известно, база данных Joomla – это набор таблиц. У каждой таблицы есть столбцы и строки, при этом в столбцах указывается переменная, а в строках – ее значения.

Вот пример:

Таблица: birthday

ФИО

Год рождения

Иванов Иван Иванович

1977

Петров Петр Петрович

1988

Сидоров Сидр Сидорович

1999

Чтобы выбрать конкретную запись, нам нужно выбрать правильный столбик и задать условие выбора строки. Т.е., например, сказать: «Выбери ФИО того человека, который родился в 1988 году».

В SQL за «выбери» отвечает SELECT, а за «который родился» – WHERE. Кроме того, т.к. в Joomla таблица не одна, а много, нам нужно указать в запросе название таблицы( за это отвечает оператор FROM).

Таким образом, наш SQL-запрос будет иметь следующий вид:

SELECT ФИО FROM birthday WHERE Год рождения = '1988'

Результатом выполнения этого запроса будет «Петров Петр Петрович»

Надеюсь, более-менее понятно. Более подробно о языке SQL можно почитать в Интернете. Информации море.

Вернемся к нашему плагину. Следующие три опции теперь должны быть понятны. Кроме того, они уже заполнены, так что можно делать по аналогии.

SELECT – сюда вписываем название столбца, из которого будем выбирать значение;

FROM – тут будет название таблицы, из которой будем выбирать столбец;

WHERE – здесь нужно указать условие, по которому будет выбираться строка столбца.

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

1
2
3
4
5
SELECT CONCAT(name, ' - ', viewscount)

FROM #__comprofiler_views, #__users

WHERE viewer_id = id AND profile_id = {USERID}

Посмотрим, что тут к чему. Во-первых, «CONCAT» - это оператор языка SQL, который объединяет строки. Т.е. мы объединяем значения столбцов name (имя пользователя) и viewscount (количество просмотров профиля), вставляя между ними дефис. Т.е. результатом будет что-то типа: «Иванов Иван Иванович - 156» и именно это выведется в профиль.

Теперь далее. Т.к. столбцов у нас два, и находятся они в разных таблицах, нам нужно указать эти две таблицы: #__comprofiler_views, #__users.

И последнее, самое важное и сложное, это условие выбора. Здесь в ход идут уже логические выражения «И»(AND) и «ИЛИ»(OR). AND означает, что результат будет выдан только для тех строк, в которых выполняется и первое и второе условие. OR или первое, или второе, или обе вместе.

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

Output Mode (режим выводов результата запроса) – ниже расскажу, что это такое, и, вообще, зачем нужен этот режим.

В ранних версиях плагина выбор режима вывода отсутствовал, и результат запроса просто выводился в профиль. Все работало отлично, если бы не одно но. В этом случае в базе данных не содержаться полученные результаты, они формируются «на лету» с помощью SQL-запроса. Из этого следует один большой минус данного метода – невозможно провести ранжирование пользователей по данному полю. Т.е. составить упорядоченный список пользователей, где они упорядочены по полю, полученному с помощью SQL-запроса. Это логично и правильно, но плохо, т.к. хочется, и потому многие пользователи писали автору плагина, что надо как-нибудь решить данную проблему. Автор прислушался и решил путем добавления возможности не только вывести результаты SQL-запроса, но и сохранить их в базу данных, что позволит производить по ним ранжирование. Решение, конечно, не слишком элегантное, т.к. для добавления в профиль одного поля в базу приходится добавлять два: в одном как бы исполняется SQL-запрос, а во второе сохраняется его результат. Зато это позволяет формировать какие душе угодно списки пользователей, что невероятно расширяет возможности  Community Builder.

Таким образом, в данной опции мы можем выбрать одно из трех значений: Display Only – только показывать на профиле, не сохраняя значения, Save Only только сохранение в базу данных, без отображения на профиле, Both – и отображать и сохранять в базу. При выборе Save Only или Both ниже появляется еще одна опция, про которую написано ниже.

Field Name – имя таблицы базы данных, в которую нужно сохранять результаты выполнения SQL-запроса. Для этих целей нам нужна новая таблица. Она легко создается через все тот же менеджер полей Community Builder. При добавлении поля добавляется и таблица, которую в дальнейшем можно использовать для сохранения результатов. И ранжирование будет происходить как раз по этому полю.

Add Prefix – добавление чего-либо перед выводом результата запроса. Под «чем-либо» я понимаю, например какой-нибудь вступительный текст и.т.д.

Add Suffix – добавление чего-либо после вывода результата запроса.

– Add Delimiter (добавить разделитель) – появляется только в случае, когда опция Result Type установлена в Multiple. Позволяет выбрать разделитель значений результата, если результат множественный.

Profile Display (отображение на профиле) – здесь можно выбрать кому показывать данное поле. All – всем, User Only – только пользователю, которому принадлежит профиль, Viewer Only – тол ько тем, кто просматривает профиль.

Как можно заметить, CB MySQL Field Plugin замечательный плагин, особенно, если его использовать в связке с Community Builder Profile PRO. Главный плюс этих расширений в том, что они снимают почти все технические ограничения. Остается только проявить фантазию и создать уникальный, ни с чем несравнимый сайт.

Об авторе
Wedal
(Виталий). Веб-разработчик полного цикла (Full Stack). Создатель и автор сайта Wedal.ru.
Основной профиль – создание сайтов и расширений на CMS Joomla.
Добавить комментарий

Комментарии  
-7
Не знающим языка SQL этот плагин будет неинтересен. Весьма узок кругом своего использования. Но стимул определённо есть.
2
Alexander, тут дело даже не в языке, а в опыте работы с Community Builder. Всю "вкусность" плагина понимаешь только тогда, когда за плечами есть проекты с CB.
6
Полезный плагин, круто расширяет возможности CB
3
Однако не стоим на месте, смело берёмся за описание других плагинов. Их много а вот описания практически не сыщешь. Wedal в этом отношении -большой молодец !!!
0
Меня очень интересует FIELD Name. Создается таблица, говорите. К сожалению, я эту таблицу не могу найти, где она...

P.S.
Очень полезные для меня статьи по CB. Спасибо
0

Цитирую Максим:

Меня очень интересует FIELD Name. Создается таблица, говорите. К сожалению, я эту таблицу не могу найти, где она...

P.S.
Очень полезные для меня статьи по CB. Спасибо


Таблицу нашел :)
Главный вопрос - можно ли сохранить результаты множественного вывода?
У меня получается сохранить только одно значение
0
Максим, можно, но, судя по всему, результаты будут выводиться в одну ячейку таблицы через разделители. Т.е., например, через запятую. Это, конечно, не совсем то, чего хотелось бы.
1
Всё очень круто расписано,спасибо за уроки!Авы не собираетесь создать урок по теме Community Builder-Система начисления балов AlphaUserPoints??Хотелось бы понять как правило для него создать :roll:
0
MoSkiT, про AlphaUserPoints напишу обязательно. Замечательный компонент. Только вот пока не могу сказать как скоро.
1
Хорошая статья,ОГРОМНОЕ СПАСИБО ЗА НЕЁ! Прочитал и надумал вывести в профиле пользователя реферальную ссылку и кол-во привлеченных пользователей. Использую CB Profile Pro и AlphaUserPoints! Соответственно запрос делаю через этот плагин, для кол-во привлеченных польз пишу след.
Select: referrees
From: jos_alpha_userpoints
Where: userid
цифру выводит,НО во всех профилях оно показывает кол-во привлечённых администратором,а цель стоит,выводить кол-во привлечённых пользователей конкретного профиля! Подскажите как осуществить! Я так понимаю мне ещё нужно брать данные столбца profile_id из таблицы jos_comprofiler_views или я ошибаюсь?
0
Dima,

WHERE profile_id = {USERID}

Допишите это.
0
Спасибо,всё отлично
0
Поспешил с фразой "Всё отлично") так как Вы написали не выводит почему-то! Получается вывести число если прописать WHERE userid = {USERID}
0
Dima, а, ну значит так :-) .
0
Никак не могу разобраться как с помощью MySQL Field Type Plugin вывести в профиль число статей, написанных пользователем :-| Помогите друзья!
0
Саша, SELECT COUNT(*)FROM #__content WHERE created_by = {USERID}
0
Wedal, огромное спасибо !!!
0
Скажите пожалуйста, как определить, какое имя имеет таблица для нужного (любого) поля?
И еще вопрос. Можно ли при помощи этого плагина сделать следующее. Хотелось бы результаты запросов выводить не в профиле, а в произвольном месте сайта (например, в новом модуле). Или для этого существуют другие плагины? если знаете о них, напишите пожалуйста название!
0
Юрий,

Цитата:

Скажите пожалуйста, как определить, какое имя имеет таблица для нужного (любого) поля?

Залезть в базу и найти. Там все хорошо структурировано. Проблем возникнуть не должно, если знаете что такое PhpMyAdmin.


Цитата:

И еще вопрос. Можно ли при помощи этого плагина сделать следующее. Хотелось бы результаты запросов выводить не в профиле, а в произвольном месте сайта (например, в новом модуле). Или для этого существуют другие плагины? если знаете о них, напишите пожалуйста название!

Можно использовать, например, это:
http://extensions.joomla.org/extensions/core-enhancements/data-reports/10785
0
какой запрос необходимо прописать в плагин чтоб вывести индивидуальный id
спасибо
-1

Цитирую Wedal:

Саша, SELECT COUNT(*)FROM #__content WHERE created_by = {USERID}


Не получается так, как у Вас. Появляется строка - Написано статей, и прочерк вместо количества, хотя статьи добавленные есть.
В чем может быть ошибка?
-1
Спасибо, релиз очень помог.. благодарю.. просто разговора не должно быть.. молодцы ребятя.. млин респект астору.. :-)
-1
Добрый вечер прошу смотреть мое предложение.

Автор напиши если будет время ЗАПЛАЧУ.

Вот скайп: alexsei_rabota

А в целом надо прикрутить к виртуемарту и еще одному компоненту .. вот это
0
очень хорошо рассказываете и поэтому вопрос:
было бы очень актуально рассказать о настройках прав для пользователей : для списка и полей с табами ,поскольку все эксперименты с ними (на разных сборках джум ) похожи на один и очень большой баг,не малую роль в этом по-видимому сыграли и переводчики...

""Группа пользователей, к которой разрешается доступ:"" или я что-то недопонял,но в переводе это означает доступ к просмотру ,а не доступ к группе ,и вроде как работает...
А вот сдесь просто пустота-""View Access Level:"" я так понял для всех версий джум ,но не работает(
а с полями и табами совсем караул
и какой-либо внятной информации по этому поводу нет ,только рерайт 5 руб за 1000 знаков(
0
немного не в тему но не могу найти ни где:

Как назвать поле без префикса cb_ ???
или как новые префиксы добавить?
0
Цель была отсортировать список пользователей CB по баллам из AUP...
Сортирует, но как то странно по первой цифре, а не по всему количеству т.е. например есть пользователи с 80, 60, 20, 120, 110 и 0 баллами так вот он вперед ставит именно в том порядке в котором я написал чуть выше... и как это исправить пока не можем дотумкать
0

Цитирую EgorLit:

Цель была отсортировать список пользователей CB по баллам из AUP...
Сортирует, но как то странно по первой цифре, а не по всему количеству т.е. например есть пользователи с 80, 60, 20, 120, 110 и 0 баллами так вот он вперед ставит именно в том порядке в котором я написал чуть выше... и как это исправить пока не можем дотумкать


Решение найдено
0
Друзья мне очень необходим плагин чтобы вставить модуль в tab. Такой ваще существует? Если да то он ведь даст огромные возможности для творчества в CB!
0
евген, смотрите http://wedal.ru/rasshireniya-joomla/community-builder-socialnaya-set-dlya-joomla-chast-9-community-builder-profile-prohtml.html
0
Установил CB, интегрировал с aup, с помощью cb_mysqlfield создал запрос вида:

SELECT points
FROM ly30o_alpha_userpoints
WHERE userid={USERID}

На сайте появилось нужное поле с количеством баллов, НО теперь я не могу зайти в User Manager, т.к. мне пишет об ошибке 1064:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 SQL=SELECT `points` AS mysqlfield FROM `koj6x_alpha_userpoints` WHERE userid =

Что делать?
1
Daniel, попробуйте в запросе поставить {USERID} в кавычки. Отрабатывать для второго случая это не будет, но и ошибка должна исчезнуть.
0

Цитирую Wedal:

Daniel, попробуйте в запросе поставить {USERID} в кавычки. Отрабатывать для второго случая это не будет, но и ошибка должна исчезнуть.


Реально помогло! Была похожая проблема.. Спасибо за статью, очень полезная!
0
Спасибо за статью,хоть я еще не знаю буду или нет его использовать,но плагин на будущее может быть и понадобится.
0
Интересует еще плагины cb.ratiofield и cb.decimalfield,не могу еще понять для чего они,если не трудно напишите и об них статьи.Может ссылки есть на те места где они описаны по их настройке.Заранее благодарю.
0
Приветствую! =) Мощнее ли этот компонент по функциональности чем JoomSocial ?
1
Владимир, в принципе, они аналогичны. Просто JoomSocial платный продукт, а Community Builder в базовой версии является бесплатным. Но если расширять функционал CB, то за это придется платить. В итоге то на то и выйдет. Попробуйте оба. Остановитесь на том, который будет ближе :-)