Новости Joomla

Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list

👩‍💻 Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list.При работе над плагином возникла необходимость указать стандартный набор из нескольких элементов стандартного поля списка. И хотелось указать их в стандартном же атрибуте default для полей. Когда это нужно?Когда Ваши пользователи устанавливают плагин и НЕ заходят в настройки - в коде вы можете использовать значения по умолчанию с помощью класса Registry (писал об этом ранее) и всегда быть уверенным, что хоть какие-то жизненно необходимые параметры к вам придут всегда. 🧐 Но как сделать то же самое для интерфейса админки?Пользователя нужно направлять, предлагать очевидный работоспособный сценарий для начала, а дальше он уже сам разберется. Когда человек заходит в параметры свежеустановленного плагина в Form ещё нет данных и параметры по умолчанию выставляются из атрибутов default в xml-полях.
<field name="showdesc" type="radio"                       label="PLG_CFI_PARAM_SHOWDESC"                       class="btn-group btn-group-yesno"                       default="1">                    <option value="0">JNO</option>                    <option value="1">JYES</option>                </field>
Здесь по умолчанию будет включено "Да". И если пользователь не переключит параметр, то при сохранении мы ожидаемо получим "да" в params плагина.Для поля списков type=&quot;list&quot; можно указать значение по умолчанию и многие знают, что его можно указать только одно.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default="id"                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
Но у нас поле с множественным выбором (атрибут multiple) и хотелось бы указать несколько значений по умолчанию...Оказывается, так можно сделать. Для этого в атрибуте default нужно указать json с нужными параметрами в виде {int}key : {string} value.Например, default='{"0":"id","1":"title"}'.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default='{"0":"id","1":"title"}'                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
⚠️ Обратите внимание на кавычки! Поскольку json_decode не понимает одинарные кавычки собственно json нужно писать с двойными, а значение для атрибута default писать в одинарные.🙏 За подсказанное решение огромное спасибо участникам нашего сообщества - разработчикам Дмитрию Васюкову (@fictionlabs) и Игорю Бердичевскому (@septdir).@joomlafeed#joomla #разработка #webdev #development

0 Пользователей и 1 Гость просматривают эту тему.
  • 27 Ответов
  • 8537 Просмотров
*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
Охота сделать так чтобы за просмотр профиля CB его хозяину начислялись очки.
Прочитал инструкцию на оффсайте разработчиков.

Сделал вот это:
Включил добавление очков за ежедневные входы.(Регистрация и авторизация у меня стоит CB-ровская, Joomla-вская отключена по всем правилам.)

установил плагин, текст ниже:

Код
<?xml version="1.0" encoding="utf-8"?>
<alphauserpoints type="plugin">
    <rule>Count hits for user</rule>
    <description>Adds points when cb profile view</description>
    <component>com_comprofiler</component>
    <plugin_function>plgaup_newhitscbprofile</plugin_function>
    <fixed_points>true</fixed_points>
</alphauserpoints>

Alpha UserPoints позволил установить и включить сей плагин.
Странно но в таблицу базы данных название компонента не занеслось, занес вручную.

Далее в файле /public_html/administrator/components/com_comprofiler/comprofiler.class.php
поискал где идет обновление посещений профиля в базе данных, решил что могу привязаться к выполнению данной функции, код приведен ниже

строка 2843

Код
function _incHits($profileId) {
global $_CB_database;
$_CB_database->setQuery("UPDATE #__comprofiler SET hits=(hits+1) WHERE id=" . (int) $profileId);
if (!$_CB_database->query()) {
echo "<script type=\"text/javascript\"> alert('UpdateHits: ".$_CB_database->getErrorMsg()."');</script>\n";
// exit();
}

}

заменил данный код на

Код
function _incHits($profileId) {
global $_CB_database;
$_CB_database->setQuery("UPDATE #__comprofiler SET hits=(hits+1) WHERE id=" . (int) $profileId);
// Начало. Система получения очков за просмотры профиля.
//*******************************************************
$api_AUP = JPATH_SITE.DS.'components'.DS.'com_alphauserpoints'.DS.'helper.php';
if ( file_exists($api_AUP))
{
require_once ($api_AUP);
$aupid = AlphaUserPointsHelper::getAnyUserReferreID( $profileId );
if ( $aupid )  AlphaUserPointsHelper::newpoints( 'plgaup_hitscbprofile', $aupid);
}
//*******************************************************
// Конец. Система получения очков за просмотры профиля
if (!$_CB_database->query()) {
echo "<script type=\"text/javascript\"> alert('UpdateHits: ".$_CB_database->getErrorMsg()."');</script>\n";
// exit();
}

}

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

Подскажите пожалуйста где ошибка(только не надо говорить что в ДНК  ^-^ )

Заранее благодарен.
« Последнее редактирование: 06.11.2010, 23:23:54 от migus »
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
попробуйте вручную удалить этот плагин и поставить его через интерфейс AUP...
кстати, а вы SEF используете?
"The Lord Of A SandBox"
*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
SEF пока что не использую

Что значит поставить через интерфейс AUP, я его вроде ставил через стандартный интефейс
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
меня смущает, что вы вручную компонент в базу прописывали :dry:
"The Lord Of A SandBox"
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
кажется понял... у вас после хита еще скрипт выполняется для валидации, а апдейт базы позже происходит...
я бы попробовал после этой строки:
Код: php
if ( $needsUpdate ) {
_incHits( $profileId );
тогда очки будут начисляться с учетом тайм - аутов и глюка с первым хитом не должно быть...
« Последнее редактирование: 24.08.2010, 01:14:02 от migus »
"The Lord Of A SandBox"
*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
спасибо, попробую отпишусь
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
Как дела? Кажется понял почему правило не установилось, как-то сразу не заметил...
1. попробуйте в XML файле заменить строку:
Код
<component>com_comprofiler</component>
на эту:
Код
<component>comprofiler</component>
2. Удалите сначало правило в AUP админке, а затем посмотрите ваш XML в папке: ...home.../docs/administrator/components/com_alphauserpoints/assets/plugins/
если остался удалите вручную
3. Установите через админку AUP свой XML плагин...
удачи ;)
"The Lord Of A SandBox"
*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
Как дела? Кажется понял почему правило не установилось, как-то сразу не заметил...
1. попробуйте в XML файле заменить строку:
Код
<component>com_comprofiler</component>
на эту:
Код
<component>comprofiler</component>
2. Удалите сначало правило в AUP админке, а затем посмотрите ваш XML в папке: ...home.../docs/administrator/components/com_alphauserpoints/assets/plugins/
если остался удалите вручную
3. Установите через админку AUP свой XML плагин...
удачи ;)

спасибо, правило поставилось нормально и отображается в списке правил.

кажется понял... у вас после хита еще скрипт выполняется для валидации, а апдейт базы позже происходит...
я бы попробовал после этой строки:
Код: php
if ( $needsUpdate ) {
_incHits( $profileId );
тогда очки будут начисляться с учетом тайм - аутов и глюка с первым хитом не должно быть...

начисление за просмотр все равно не идет  :(
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
будем искать решение...

У меня вопрос. У вас по-прежнему CB 1.2.2 или уже 1.2.3 стоит?
"The Lord Of A SandBox"
*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
обновился ) юзаю 1.2.3, а есть принципиальные различия?
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
обновился ) юзаю 1.2.3, а есть принципиальные различия?

думаю, что для нашего случая - да... мы же AUP API  внедряем в файлы, а они - изменились
"The Lord Of A SandBox"
*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
ну так что? не получается? >:(
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
ну так что? не получается? >:(

Я еще не пытался - мне пока некогда...
"The Lord Of A SandBox"
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
Ну, кажется в заголовке темы можете писать [РЕШЕНО].

Во всяком случае у меня работает... :)

Итак,
1. Заменяете файл из аттача: ...home.../administrator/components/com_comprofiler/comprofiler.class.php
(или анализируете код и правите свой)
2. Устанавливаете плагин правила из аттача, назначаете стоимость (рекомендую 1 балл) и включаете его.
3. Проверяете, как работает и пишете сюда отчет .

NB: Не забудьте сделать бэкап оригинального файла!

P.S. В админке CB Менеджер конфигурации -> Профили надо установить: Минимальный интервал между просмотрами (в минутах), по-умолчанию кажется 60 мин. Чтобы удобно было тестировать - можно, временно установить короткий (например: 1 мин.)

- удачи ;)

[вложение удалено Администратором]
"The Lord Of A SandBox"
*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
Ну, кажется в заголовке темы можете писать [РЕШЕНО].

Во всяком случае у меня работает... :)

Итак,
1. Заменяете файл из аттача: ...home.../administrator/components/com_comprofiler/comprofiler.class.php
(или анализируете код и правите свой)
2. Устанавливаете плагин правила из аттача, назначаете стоимость (рекомендую 1 балл) и включаете его.
3. Проверяете, как работает и пишете сюда отчет .

NB: Не забудьте сделать бэкап оригинального файла!

P.S. В админке CB Менеджер конфигурации -> Профили надо установить: Минимальный интервал между просмотрами (в минутах), по-умолчанию кажется 60 мин. Чтобы удобно было тестировать - можно, временно установить короткий (например: 1 мин.)

- удачи ;)

Искренне благодарю за помощь. Все работает. Плюсую дважды!
Надеюсь дальнейшая интеграция на базе выводов, сделанных из примера, рассмотренного в данном посте, пойдет уже проще и быстрее.
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
Искренне благодарю за помощь. Все работает. Плюсую дважды!
Надеюсь дальнейшая интеграция на базе выводов, сделанных из примера, рассмотренного в данном посте, пойдет уже проще и быстрее.

Желаю успехов ;)
"The Lord Of A SandBox"
*

tayson72

  • Новичок
  • 2
  • 0 / 0
orsy, А как ты склонения сделал? Балл, баллов?
*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
orsy, А как ты склонения сделал? Балл, баллов?

ну вообще-то это не я делал а migus. ну а если подумать то через свитч решается выбором в зависимости от числа.
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
А как ты склонения сделал? Балл, баллов?
Вот формула плюральных форм числительного для русского языка:
Код: php-brief
$plural%10==1 && $plural%100!=11 ? 0 : ($plural%10>=2 && $plural%10<=4 && ($plural%100<10 || $plural%100>=20)? 1 : 2)
- удачи ;)
"The Lord Of A SandBox"
*

siao

  • Захожу иногда
  • 233
  • 4 / 0
замечательный плагин!
но только вот CB у меня 1.7 -)
скажите, файл comprofiler.class.php изменяется только в одном месте?
и код
Код
//insert AUP API *************************************************************
$api_AUP = JPATH_SITE.DS.'components'.DS.'com_alphauserpoints'.DS.'helper.php';
if ( file_exists($api_AUP)) {
require_once ($api_AUP);
$refid = AlphaUserPointsHelper::getAnyUserReferreID( $viewerId );
$profil = AlphaUserPointsHelper:: getUserInfo ( $refid ) ;
// rule for profile hit
$info = 'За просмотр профиля пользователем: '.( $profil->username ) ;
$aupid = AlphaUserPointsHelper::getAnyUserReferreID( $profileId );
if ( $aupid )  AlphaUserPointsHelper::newpoints('plgaup_hitprofile', $aupid, '', $info);
}
// ****************************************************************************
// End AlphaUserPoints integration for CB Profile hit rule
// Integration by: migus to integrate AlphaUserPoints system CB Profile Hit
// This integration is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// ****************************************************************************
правильно?
он подойдет для СВ1.7?

потому что плагин установился нормально
но активность по этому правилу не считается( хотя он включен и 1 балл назначен)
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
Код правильный, просто его надо в соотв. месте вставлять. Сам для CB 1.7 не делал пока. Будет время - посмотрю.
"The Lord Of A SandBox"
*

siao

  • Захожу иногда
  • 233
  • 4 / 0
вставила вобщем-то в то же место, что и в Вашем файле было.

Код
		// but we will update any IP address changes in case of a logged-in user (for guests, the SELECT above is by IP address, so that entry and IP is already same:
if ( ( $currip != $views[0]->lastip ) || $needsUpdate ) {
$query = 'UPDATE ' . $_CB_database->NameQuote( '#__comprofiler_views' )
. "\n SET " . $_CB_database->NameQuote( 'lastview' ). " = NOW()"
. ', ' . $_CB_database->NameQuote( 'lastip' ). " = " . $_CB_database->Quote( $currip )
. ( $needsUpdate ? ', ' . $_CB_database->NameQuote( 'viewscount' ). " = (" . $_CB_database->NameQuote( 'viewscount' ). "+1)" : '' )
. "\n WHERE " . $_CB_database->NameQuote( 'viewer_id' ). " = " . (int) $viewerId
. "\n AND " . $_CB_database->NameQuote( 'profile_id' ). " = " . (int) $profileId
. ( $viewerId == 0 ? "\n AND " . $_CB_database->NameQuote( 'lastip' ). " = " . $_CB_database->Quote( $currip ) : null );
$_CB_database->setQuery( $query );
if ( ! $_CB_database->query() ) {
echo "<script type=\"text/javascript\">alert( 'UpdateViews: " . addslashes( $_CB_database->getErrorMsg() ). "' );</script>\n";
}

if ( $needsUpdate ) {


//insert AUP API *************************************************************
$api_AUP = JPATH_SITE.DS.'components'.DS.'com_alphauserpoints'.DS.'helper.php';
if ( file_exists($api_AUP)) {
require_once ($api_AUP);
$refid = AlphaUserPointsHelper::getAnyUserReferreID( $viewerId );
$profil = AlphaUserPointsHelper:: getUserInfo ( $refid ) ;
// rule for profile hit
$info = 'За просмотр профиля пользователем: '.( $profil->username ) ;
$aupid = AlphaUserPointsHelper::getAnyUserReferreID( $profileId );
if ( $aupid )  AlphaUserPointsHelper::newpoints('plgaup_hitprofile', $aupid, '', $info);
}
// ****************************************************************************
// End AlphaUserPoints integration for CB Profile hit rule
// Integration by: migus to integrate AlphaUserPoints system CB Profile Hit
// This integration is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// ****************************************************************************

_incHits( $profileId );
}
}
}

}

/**
* Calendars for date fields handler
вот так в Вашем

вот так в моем:
Код
// but we will update any IP address changes in case of a logged-in user (for guests, the SELECT above is by IP address, so that entry and IP is already same:
if ( ( $currip != $views[0]->lastip ) || $needsUpdate ) {
$query = 'UPDATE ' . $_CB_database->NameQuote( '#__comprofiler_views' )
. "\n SET " . $_CB_database->NameQuote( 'lastview' ). " = NOW()"
. ', ' . $_CB_database->NameQuote( 'lastip' ). " = " . $_CB_database->Quote( $currip )
. ( $needsUpdate ? ', ' . $_CB_database->NameQuote( 'viewscount' ). " = (" . $_CB_database->NameQuote( 'viewscount' ). "+1)" : '' )
. "\n WHERE " . $_CB_database->NameQuote( 'viewer_id' ). " = " . (int) $viewerId
. "\n AND " . $_CB_database->NameQuote( 'profile_id' ). " = " . (int) $profileId
. ( $viewerId == 0 ? "\n AND " . $_CB_database->NameQuote( 'lastip' ). " = " . $_CB_database->Quote( $currip ) : null );
$_CB_database->setQuery( $query );
if ( ! $_CB_database->query() ) {
echo "<script type=\"text/javascript\">alert( 'UpdateViews: " . addslashes( $_CB_database->getErrorMsg() ). "' );</script>\n";
}

if ( $needsUpdate ) {


//insert AUP API *************************************************************
$api_AUP = JPATH_SITE.DS.'components'.DS.'com_alphauserpoints'.DS.'helper.php';
if ( file_exists($api_AUP)) {
require_once ($api_AUP);
$refid = AlphaUserPointsHelper::getAnyUserReferreID( $viewerId );
$profil = AlphaUserPointsHelper:: getUserInfo ( $refid ) ;
// rule for profile hit
$info = 'За просмотр профиля пользователем: '.( $profil->username ) ;
$aupid = AlphaUserPointsHelper::getAnyUserReferreID( $profileId );
if ( $aupid )  AlphaUserPointsHelper::newpoints('plgaup_hitprofile', $aupid, '', $info);
}
// ****************************************************************************
// End AlphaUserPoints integration for CB Profile hit rule
// Integration by: migus to integrate AlphaUserPoints system CB Profile Hit
// This integration is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// ****************************************************************************

_incHits( $profileId );
}
}
}
}

/**
* Calendars for date fields handler
* @package Commu
*

siao

  • Захожу иногда
  • 233
  • 4 / 0
посмотрела сегодня - считает хиты
но почему то не считал хиты за мои просмотры - т.е. я под своим логином просматривала профили пользователей и им в системе плюсы не добавились.
правда у меня логин "суперадминстратора", может поэтому?

(полезный плагин, спасибо!)
*

Phoenix88

  • Захожу иногда
  • 81
  • 3 / 0
  • Нет предела самосовершенствованию
Прошу прощения за вопрос чайника...
Код
$plural%10==1 && $plural%100!=11 ? 0 : ($plural%10>=2 && $plural%10<=4 && ($plural%100<10 || $plural%100>=20)? 1 : 2)

куда это надо вставить и что прописать в языковом файле?
*

Phoenix88

  • Захожу иногда
  • 81
  • 3 / 0
  • Нет предела самосовершенствованию
Никто не знает? :(
*

nthanter

  • Захожу иногда
  • 55
  • 1 / 1
Ну, кажется в заголовке темы можете писать [РЕШЕНО].

Во всяком случае у меня работает... :)

Итак,
1. Заменяете файл из аттача: ...home.../administrator/components/com_comprofiler/comprofiler.class.php
(или анализируете код и правите свой)
2. Устанавливаете плагин правила из аттача, назначаете стоимость (рекомендую 1 балл) и включаете его.
3. Проверяете, как работает и пишете сюда отчет .

NB: Не забудьте сделать бэкап оригинального файла!

P.S. В админке CB Менеджер конфигурации -> Профили надо установить: Минимальный интервал между просмотрами (в минутах), по-умолчанию кажется 60 мин. Чтобы удобно было тестировать - можно, временно установить короткий (например: 1 мин.)

- удачи ;)

а можно просто установить плагин без правки кода аттача.. чтобы вывести начисление баллов за хит?
*

Sni10

  • Захожу иногда
  • 110
  • 5 / 0
  • I am a law abiding citizen . . .
Ради всех святых покажите мне хоть в одном из представленных кодов функцию - newhitscbprofile - ? 17 раз перечитал топик ...  3 раза перешерстил мануал по php для чайников про function - но не нашел связи между установленым плагином точнее его частью <plugin_function>plgaup_newhitscbprofile</plugin_function> - с остальныи исполняемым кодом (((
*

migus

  • Moderator
  • 992
  • 144 / 0
  • OPEN THE BOX
Ради всех святых покажите мне хоть в одном из представленных кодов функцию - newhitscbprofile - ?
Посмотрите на рабочий вариант в приложенном архиве этого сообщения
"The Lord Of A SandBox"
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Редактирование профиля AUP

Автор blessedlive

Ответов: 6
Просмотров: 4964
Последний ответ 24.03.2018, 01:18:35
от ovclub
Начисление баллов за вступление вгруппу

Автор Dusk09

Ответов: 0
Просмотров: 1662
Последний ответ 11.08.2015, 23:58:23
от Dusk09
alpha userpoints ошибка при установке правил 1136

Автор terveg

Ответов: 1
Просмотров: 2133
Последний ответ 29.09.2014, 10:15:37
от migus
Как сделать правило "Загрузить аватар профиля"?

Автор Сergei

Ответов: 1
Просмотров: 2029
Последний ответ 12.05.2014, 15:40:43
от NlCK
plg jcomments alphauserpoints_j25_v3.0.1 - начисление процента баллов

Автор etos

Ответов: 0
Просмотров: 1442
Последний ответ 24.01.2014, 11:49:47
от etos