Новости 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 Гость просматривают эту тему.
  • 11 Ответов
  • 4355 Просмотров
*

ragaya

  • Осваиваюсь на форуме
  • 42
  • 0 / 0
Профиль в JomSocial
« : 30.04.2010, 13:38:04 »
Нужно в профиле JomSocial вывести количество очков (points например)
Заходим в user.php

Код
<?php
/**
 * @category Model
 * @package JomSocial
 * @subpackage Profile
 * @copyright (C) 2008 by Slashes & Dots Sdn Bhd - All rights reserved!
 * @license http://www.jomsocial.com/license-agreement.html Copyrighted Commercial Software
 */
defined('_JEXEC') or die('Restricted access');

require_once( JPATH_ROOT . DS . 'components' . DS . 'com_community' . DS . 'models' . DS . 'models.php' );

class CommunityModelUser extends JCCModel
{
var $_data = null;
var $_userpref = array();

/**
* Return the username given its userid
* @param int userid
*/
function getUsername($id){
$db = &$this->getDBO();
$sql = "SELECT `username` FROM #__users WHERE `id`=" . $db->Quote($id);
$db->setQuery($sql);

$result = $db->loadResult();

if($db->getErrorNum()) {
JError::raiseError( 500, $db->stderr());
}

return $result;
}

/**
* Return the user fullname given its userid
* @param int userid
*/
function getUserFullname($id){
$db = &$this->getDBO();
$sql = "SELECT `name` FROM #__users WHERE `id`=" .  $db->Quote($id);
$db->setQuery($sql);

$result = $db->loadResult();

if($db->getErrorNum()) {
JError::raiseError( 500, $db->stderr());
}

return $result;
}

/**
* Return the userid given its name
*/
function getUserId($username, $useRealName = false){
$db = &$this->getDBO();

$param = 'username';

if($useRealName)
$param = 'name';

$sql = "SELECT `id` FROM #__users WHERE " . $db->nameQuote($param). "=" . $db->Quote($username);

$db->setQuery($sql);
$result = $db->loadResult();

if($db->getErrorNum()) {
JError::raiseError( 500, $db->stderr());
}

return $result;
}

/**
* Return the user's email given its id
*/
function getUserEmail($id){
$db = &$this->getDBO();

$query = "SELECT `email` FROM #__users WHERE `id`=" . $db->Quote($id);
$db->setQuery($query);
$result = $db->loadResult();

if($db->getErrorNum()) {
JError::raiseError( 500, $db->stderr());
}

return $result;
}

function getMembersCount()
{
$db =& $this->getDBO();

$query = 'SELECT COUNT(*) FROM ' . $db->nameQuote( '#__users' ). ' '
. 'WHERE ' . $db->nameQuote( 'block' ). '=' . $db->Quote( 0 );

$db->setQuery( $query );

$result = $db->loadResult();

if($db->getErrorNum()) {
JError::raiseError( 500, $db->stderr());
}

return $result;
}

/**
* Return the basic user profile
*/
function getLatestMember($limit = 15)
{
$db = &$this->getDBO();

$query = 'SELECT * FROM ' . $db->nameQuote( '#__users' ). ' '
. 'WHERE ' . $db->nameQuote( 'block' ). '=' . $db->Quote( 0 ). ' '
. 'ORDER BY ' . $db->nameQuote( 'registerDate' ). ' '
. 'DESC LIMIT ' . $limit;
$db->setQuery( $query );

$result = $db->loadObjectList();

if($db->getErrorNum())
{
JError::raiseError( 500, $db->stderr());
}


$latestMembers = array();

$uids = array();
foreach($result as $m)
{
$uids[] = $m->id;
}
CFactory::loadUsers($uids);

foreach( $result as $row )
{
$latestMembers[] = CFactory::getUser($row->id);
}
return $latestMembers;
}

function getActiveMember($limit = 15)
{
$uid = array();
$uid_str = "";
$db = &$this->getDBO();

$query = " SELECT
b.*,
a.".$db->nameQuote('actor').",
COUNT(a.".$db->nameQuote('id').") AS ".$db->nameQuote('count')."
   FROM
".$db->nameQuote('#__community_activities')." a
INNER JOIN ".$db->nameQuote('#__users')." b
  WHERE
a.".$db->nameQuote('app')." != ".$db->quote('groups')." AND
b.".$db->nameQuote('block')." = ".$db->quote('0')." AND
a.".$db->nameQuote('archived')." = ".$db->quote('0')." AND
a.".$db->nameQuote('actor')." = b.".$db->nameQuote('id')." 
   GROUP BY a.".$db->nameQuote('actor')."
   ORDER BY ".$db->nameQuote('count')." DESC
   LIMIT ".$limit;
$db->setQuery( $query );
$result = $db->loadObjectList();

if($db->getErrorNum())
{
JError::raiseError( 500, $db->stderr());
}

$latestMembers = array();

foreach( $result as $row )
{
$latestMembers[] = CFactory::getUser($row->id);
}
return $latestMembers;
}

function getPopularMember($limit = 15)
{
$uid = array();
$uid_str = "";
$db = &$this->getDBO();

$query = " SELECT b.*
   FROM
".$db->nameQuote('#__community_users')." a
INNER JOIN ".$db->nameQuote('#__users')." b
  WHERE
b.".$db->nameQuote('block')." = ".$db->quote('0')." AND
a.".$db->nameQuote('userid')." = b.".$db->nameQuote('id')." 
   ORDER BY a.".$db->nameQuote('view')." DESC
   LIMIT ".$limit;
$db->setQuery( $query );
$result = $db->loadObjectList();

if($db->getErrorNum())
{
JError::raiseError( 500, $db->stderr());
}

$latestMembers = array();

foreach( $result as $row )
{
$latestMembers[] = CFactory::getUser($row->id);
}
return $latestMembers;
}

// Return JDate object of last login date
function lastLogin($userid){
}

/**
* is the email exits
*/
function userExistsbyEmail( $email ) {
$db = &$this->getDBO();
$sql = "SELECT count(*) from #__users"
." WHERE `email`= " . $db->Quote($email);

$db->setQuery($sql);
$result = $db->loadResult();
return $result;
}

/**
* Save user data.
*/
function updateUser( &$obj )
{
$db = &$this->getDBO();
return $db->updateObject( '#__community_users', $obj, 'userid');
}

/**
* Set the avatar for specific application. Caller must have a database table
* that is named after the appType. E.g, users should have jos_community_users
*
* @param appType Application type. ( users , groups )
* @param path The relative path to the avatars.
* @param type The type of Image, thumb or avatar.
*
**/
function setImage(  $id , $path , $type = 'thumb' )
{
CError::assert( $id , '' , '!empty' , __FILE__ , __LINE__ );
CError::assert( $path , '' , '!empty' , __FILE__ , __LINE__ );

$db =& $this->getDBO();

// Fix the back quotes
$path = JString::str_ireplace( '\\' , '/' , $path );
$type = JString::strtolower( $type );

// Test if the record exists.
$query = 'SELECT ' . $db->nameQuote( $type ). ' FROM ' . $db->nameQuote( '#__community_users' )
. 'WHERE ' . $db->nameQuote( 'userid' ). '=' . $db->Quote( $id );

$db->setQuery( $query );
$oldFile = $db->loadResult();

if($db->getErrorNum())
{
JError::raiseError( 500, $db->stderr());
    }
   
    $appsLib =& CAppPlugins::getInstance();
$appsLib->loadApplications();
$args = array();
$args[] = &$id; // userid
$args[] = &$oldFile; // old path
$args[] = &$path; // new path
$appsLib->triggerEvent( 'onProfileAvatarUpdate' , $args );
   
    if( !$oldFile )
    {
    $query = 'UPDATE ' . $db->nameQuote( '#__community_users' ). ' '
    . 'SET ' . $db->nameQuote( $type ). '=' . $db->Quote( $path ). ' '
    . 'WHERE ' . $db->nameQuote( 'userid' ). '=' . $db->Quote( $id );
    $db->setQuery( $query );
    $db->query( $query );

if($db->getErrorNum())
{
JError::raiseError( 500, $db->stderr());
    }
}
else
{
    $query = 'UPDATE ' . $db->nameQuote( '#__community_users' ). ' '
    . 'SET ' . $db->nameQuote( $type ). '=' . $db->Quote( $path ). ' '
    . 'WHERE ' . $db->nameQuote( 'userid' ). '=' . $db->Quote( $id );
    $db->setQuery( $query );
    $db->query( $query );
   
if($db->getErrorNum())
{
JError::raiseError( 500, $db->stderr());
    }
   
// If old file is default_thumb or default, we should not remove it.
// Need proper way to test it
if(!JString::stristr( $oldFile , 'components/com_community/assets/default.jpg' ) && !JString::stristr( $oldFile , 'components/com_community/assets/default_thumb.jpg' ) )
{
// File exists, try to remove old files first.
$oldFile = JString::str_ireplace( '/' , DS , $oldFile );
JFile::delete($oldFile);
}
}
}

/**
* Return array of profile variables
*/
function getProfile(){
}

function getOnlineUsers( $limit = 15 , $backendUsers = false )
{
$db =& $this->getDBO();


$query = 'SELECT DISTINCT(a.id)'
. 'FROM ' . $db->nameQuote( '#__users' ). ' AS a '
. 'INNER JOIN ' . $db->nameQuote( '#__session'). ' AS b '
. 'ON a.id=b.userid '
. 'WHERE a.block=' . $db->Quote( '0' ). ' ';

if( !$backendUsers )
{
$query .= 'AND client_id != ' . $db->Quote( 1 );
}

$query .= 'ORDER BY b.time DESC '
. 'LIMIT ' . $limit;

$db->setQuery( $query );
$result = $db->loadObjectList();

return $result;
}
}



Отцы Joomla, подскажите как можно оптимизировать профайл?
Цена вопроса 10wmz (Объясните, научите)
*

ragaya

  • Осваиваюсь на форуме
  • 42
  • 0 / 0
Re: Профиль в JomSocial
« Ответ #1 : 30.04.2010, 14:06:19 »
Вот если тут mykarma заменить на points?
Код
<div>
<?php
if($show_karma)
{
?>
<img src="<?php echo $myKarma; ?>" alt="<?php echo JText::_('MOD_HELLOME KARMA'); ?>" width="103" height="19" style="margin: 5px 0 0;" />
<?php
}
?>
</div>
*

demon1977

  • Осваиваюсь на форуме
  • 31
  • 7 / 0
Re: Профиль в JomSocial
« Ответ #2 : 30.04.2010, 18:26:22 »
Что бы добавить "Баллы" в профиль:
Идем /components/com_community/templates/default ищем файл profile.header.php
находим код
Код
<ul class="profile-details">
<?php if($config->get('enablekarma')){ ?>
<li class="title"><?php echo JText::_('CC KARMA'); ?></li>
<li><img src="<?php echo $karmaImgUrl; ?>" alt="" /></li>
<?php } ?>
после него добовляем (балы будут сразу под кармой)
Код
<li class="title"><?php echo JText::sprintf( (cIsPlural($user->_points))? 'CC POINTS' : 'CC SINGULAR POINT' ); ?></li>
<li class="number"><?php echo $user->_points; ?></li>

Далее для того что бы добавить доп информацию в профиль (нижняя фотка, там где "Добавить строчку например ссылку"). Ниже по коду ищем
Код
<li class="invite">
        <a href="<?php echo CRoute::_('index.php?option=com_community&view=friends&task=invite'); ?>">
           <span><?php echo JText::_('CC INVITE FRIENDS'); ?></span>
        </a>
</li>
После вставляем свой код.
« Последнее редактирование: 30.04.2010, 21:29:11 от demon1977 »
*

Romeo

  • Осваиваюсь на форуме
  • 45
  • 3 / 0
Re: Профиль в JomSocial
« Ответ #3 : 30.04.2010, 21:55:04 »
Скажи а как сделать чтобы количество поинтов выводилось справа от названия (т.е. Points: "число")

<li class="title"><?php echo JText::sprintf( (cIsPlural($user->_points))? 'CC POINTS' : 'CC SINGULAR POINT' ); ?></li>
<li class="number"><?php echo $user->_points; ?></li>
*

demon1977

  • Осваиваюсь на форуме
  • 31
  • 7 / 0
Re: Профиль в JomSocial
« Ответ #4 : 30.04.2010, 23:26:40 »
Код
<li class="title"><?php echo JText::sprintf( (cIsPlural($user->_points))? 'CC POINTS' : 'CC SINGULAR POINT' ); ?>:&nbsp;<?php echo $user->_points; ?></li>
« Последнее редактирование: 30.04.2010, 23:34:51 от demon1977 »
*

Zombeee

  • Захожу иногда
  • 328
  • 55 / 3
Re: Профиль в JomSocial
« Ответ #5 : 01.05.2010, 07:46:44 »
и почему меня постоянно преследует ощущение, что сайты делают люди, которые абсолютно в этом не разбираются... иначе откуда может взяться вопрос, ответ на который - поменять местами 2 переменные?
*

Romeo

  • Осваиваюсь на форуме
  • 45
  • 3 / 0
Re: Профиль в JomSocial
« Ответ #6 : 01.05.2010, 14:31:27 »
и почему меня постоянно преследует ощущение, что сайты делают люди, которые абсолютно в этом не разбираются... иначе откуда может взяться вопрос, ответ на который - поменять местами 2 переменные?
Ахахаха цена вопроса была 10WMZ, ну надо было как то "усложнить", чтобы вопрос действительно стоил этих денег! Не воспринимай все так близко)))
*

ragaya

  • Осваиваюсь на форуме
  • 42
  • 0 / 0
Re: Профиль в JomSocial
« Ответ #7 : 02.05.2010, 11:54:07 »
=) Спасибо ;)
*

ragaya

  • Осваиваюсь на форуме
  • 42
  • 0 / 0
Re: Профиль в JomSocial
« Ответ #8 : 02.05.2010, 15:57:09 »
А вот еще вопрос.
Ведь я могу подставить любую переменную.
Код
<li class="title"><?php echo JText::sprintf( (cIsPlural($user->_points))? 'CC POINTS' : 'CC SINGULAR POINT' ); ?></li>
<li class="number"><?php echo $user->_points; ?></li>

Можно ли сюда подставить значение из другой таблицы? К примеру отображение страны, icq и тд.
Если есть строка - "icq, skype" то просто можно подставить значение или же нужно создать строку в таблице community_users?
*

ragaya

  • Осваиваюсь на форуме
  • 42
  • 0 / 0
Re: Профиль в JomSocial
« Ответ #9 : 02.05.2010, 16:04:00 »
Данные именно на профиль идут с одной таблицы?
*

demon1977

  • Осваиваюсь на форуме
  • 31
  • 7 / 0
Re: Профиль в JomSocial
« Ответ #10 : 02.05.2010, 23:25:39 »
=) Спасибо ;)
Пожалуйста, Z332318026763 ;)
« Последнее редактирование: 03.05.2010, 01:49:24 от demon1977 »
*

arturk

  • Захожу иногда
  • 105
  • 11 / 2
Re: Профиль в JomSocial
« Ответ #11 : 05.05.2010, 10:18:16 »
добавляем ссылку на плагин  "filesharing"  в профиле
идем сюда, берем файл
незабываем копию!

components/com_community/templates/default/profile.header.php

тут ищем строки
Код
						
<li class="invite">
<a href="<?php echo CRoute::_('index.php?option=com_community&view=friends&task=invite'); ?>">
<span><?php echo JText::_('CC INVITE FRIENDS'); ?></span>
</a>
</li>

после них пишем

Код
<li class="invite">
<a href="<?php echo CRoute::_('index.php?option=com_community&view=profile&userid=' . $profile->id . '&task=app&app=filesharing'); ?>">
<span><?php echo JText::_('CC ADD MUSIC'); ?></span>
</a>
</li>

Код
<li class="invite">
надо переделать, отвечает за картиночку) CSS править надо
Код
echo JText::_('CC ADD MUSIC')
это подгружает слова из языкового файла /language/ru-RU/ru-RU.com_community.ini
тоесть следует добавить туда строку
Код
CC ADD MUSIC=Добавить музыку
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

позиции модулей JomSocial и их отображение - sufix

Автор arturk

Ответов: 42
Просмотров: 22220
Последний ответ 13.06.2020, 14:10:26
от ademar
Ошибки после установки JomSocial.

Автор DKsN

Ответов: 80
Просмотров: 24772
Последний ответ 06.03.2016, 23:55:31
от Amigos
[Решено] JomSocial Как перенести правую колону (обо мне, последние группы, кто в сети и т.д.) с прав

Автор galemus

Ответов: 15
Просмотров: 7613
Последний ответ 29.11.2014, 23:43:36
от ingavr
Делаем адекватное меню в JomSocial.

Автор nolimits4web

Ответов: 38
Просмотров: 28608
Последний ответ 11.11.2014, 17:19:49
от kasper9820
Шаблон то JomSocial не грузится. Трабл с CSS JomSocial

Автор teo21

Ответов: 3
Просмотров: 4717
Последний ответ 11.11.2014, 14:21:31
от kasper9820