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

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Несколько лет назад я написала плагин hkm_profile, позволяющий генерировать поля расширенного профиля cms Joomla. Сейчас хочу поделиться с вами его развитием - zygo_profile. Точнее, уже тремя расширениями.



ОПИСАНИЕ И СКРИНШОТЫ:
Более подробное описание со ссылками на скачивание расширений находится здесь:
http://www.psytronica.ru/2015/10/joomla-3x-zygoprofile-hkmprofile.html

В двух словах: пользователь получает возможность заполнить в своем профиле при регистрации/правке профиля дополнительные поля расширенного профиля (например: загрузить аватар, добавить личную подпись, выбрать день рождения, свой пол из выпадающего списка.... Состав полей не является определенным, пользователь создает его сам, как конструктор). Данные поля настраиваются в админ-панели плагина Zygo Profile - определяется их состав, тип, названия, required и прочие свойства. Поля могут быть разных типов: текстовые, списки, радиокнопки, аватар, дата.  Затем при помощи плагина  Zygo Profile Content можно вывести информацию из этих полей в материалы Joomla (отобразить аватар блоггера, вывести его подпись).

Ссылки на GitHub:  

Zygo Profile - Плагин расширенного профиля пользователя:
GitHub: https://github.com/psytronica/zygoprofile

Ветка "Development" : https://github.com/psytronica/zygoprofile/tree/development

Zygo Profile Content - Плагин вывода полей расширенного профиля в материалы Joomla
GitHub: https://github.com/psytronica/plg_content_zygo_profile

Zygo Online - Модуль "кто на сайте" с выводом аватаров пользователей из расширенного профиля
GitHub: https://github.com/psytronica/mod_zygo_online

Zygo Jcomments - Плагин для отображения аватара из Zygo Profile в jComments (автор docenttmp):
GitHub: https://github.com/docenttmp/plg_jcomments_zygo_avatar
docenttmp также сделал возможность отображения online/offline в комментариях. Инструкции в настройках плагина

Zygo Kunena Avatars - Плагин для отображения аватара из Zygo Profile в форуме Kunena
GitHub: https://github.com/psytronica/Zygo-Kunena-Avatars

ДЕМО-ПЕСОЧНИЦА:

http://psytronica.getenjoyment.net/
Весь дополнительный функционал - аватары, любимые цвета, выводится посредством плагина Zygo Profile Content
Место вывода полей, количество, и т.д. настраивается в админ-панели плагина

Плагин Zygo Profile  содержит API, позволяющий выводит информацию расширенных полей пользователей (напр. аватары, дни рождения и т.д.) в произвольном месте и использоваться для интеграций с другими расширениями

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

Буду рада вашим вопросам, советам по улучшению приложения и конструктивной критике
*

T34

  • Новичок
  • 9
  • 1 / 0
Чудесная Зья, я опять к Вам с вопросом.

Оказалось, рано я возрадовался, так как вытащить из "user_profiles" нужно несколько значений и вставить их в соответствующие поля, а переменная $fid в замечательном вашем решении только одна. Причем тащить нужно и вставленные расширенным профилем значения, и встроенным в Joomla! тоже. И всё это одновременно, поскольку потом в скрытых полях <input> всё в соответствующем оформлении должно разом по submit улететь в цель. С вылетом проблем нет, а вот собрать пассажиров — это прям вот ад для меня оказался.

Как их всех лучше собрать, не надоумите ли?  ^-^

 
« Последнее редактирование: 21.07.2016, 14:53:26 от T34 »
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
А в чем сложность?

Для нескольких полей zygo_profile вот пример:

Код: php
<?php

$fid1 = 1;
$field1 = ZygoHelper::getFieldData($fid1, $user->id);

$fid2 = 3;
$field2 = ZygoHelper::getFieldData($fid2, $user->id);

echo $fid1;
echo $fid2;
?>

Для нескольких стандартных полей такой пример:

Код: php
<?php

$uinfo = ZygoHelper::getUserInfo($user->id);
 
$fieldname1 = "city";
 
$field_value1 = json_decode($uinfo["profile.".$fieldname1]);

$fieldname2 = "postal";
 
$field_value2 = json_decode($uinfo["profile.".$fieldname2]);
 
echo $field_value1;

echo $field_value2;

?>
*

T34

  • Новичок
  • 9
  • 1 / 0
Конечно, если такая мастерица — то не сложно.
Спасибо огромное Вам! Выручили!

*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Небольшое обновление - теперь можно назначать дополнительные поля одной или нескольким группам пользователей. Так, например, поле, которые Вы назначили пользователям группы manager, будет отображаться в профиле у пользователей, приналежащих этой группе. Так же у них появится возможность редактировать содержимое данного поля.
*

voland

  • Легенда
  • 10455
  • 558 / 111
  • Эта строка съедает место на вашем мониторе
Любопытная фича.
Обратная совместимость полная?
*

fandjuml

  • Захожу иногда
  • 59
  • 6 / 3
Небольшое обновление - теперь можно назначать дополнительные поля одной или нескольким группам пользователей. Так, например, поле, которые Вы назначили пользователям группы manager, будет отображаться в профиле у пользователей, приналежащих этой группе. Так же у них появится возможность редактировать содержимое данного поля.
Рад что Вы вернулись с новым функционалом! Мне такое как раз нужно - именно поля по группам пользователей.
Меня полностью устраивает zygo_profile, но всё таки задам вопрос:
Есть ли возможность переделать плагин так, чтобы в профиле сначала стоял zigo, а после Joomla. Хотя бы на страничке редактирования профиля. Всё таки приятней когда редактирование начинается с аватара и расширенных полей, а Joomla поля опустить в подвал.
Да если честно - и в самом профиле аватарку поднять бы на самый верх. Меня это не напрягает, но если есть возможность я был бы не против.

*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
fandjuml, я подумала над Вашим предложением, еще раз проанализировала код и поняла, что все-таки в плагине я это пока реализовывать не буду, чтобы избежать несовместимостей с более поздними версиями Joomla, поскольку там получится много завязок на конкретные детали. Но для вас я сделала такую возможность. Файл https://dl.dropboxusercontent.com/u/13153899/psytronica/adds/zygo_profile.php необходимо необходимо положить в plugins/user/zygo_profile/. К тому же, это не решает абсолютно вашу задачу, поскольку в случае просмотра и редактирования профиля в шаблоне (components/com_users/views/profile/tmpl/default.php) прописано четко, что вначале загружаются параметры core, затем params, а уж только потом - custom

вот эти строки:
Код: php
<?php echo $this->loadTemplate('core');?>

<?php echo $this->loadTemplate('params');?>

<?php echo $this->loadTemplate('custom');?>


Гораздо проще это решить иным путем - через файлы шаблона. В директории вашего шаблона сайта создаете папку HTML (если еще не создана), в ней - com_users (если еще нет) и туда кладете файлы шаблона (копируете в поддиректории соответствующие tmpl из компонента com_users). В частности, после копирования components/com_users/views/profile/tmpl/default.php в templates/ваш_шаблон/com_users/profile/default.php, меняете в нем порядок вывода:

Код: php
<?php echo $this->loadTemplate('custom');?>

<?php echo $this->loadTemplate('core');?>

<?php echo $this->loadTemplate('params');?>

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

fandjuml

  • Захожу иногда
  • 59
  • 6 / 3
Спасибо! Буду изучать и пробовать, но наверное уже завтра, чтоб вдруг что можно было откатить (просто у меня хостер в три ночи копии делает, а акебу я на этот сайт не ставил).

По вашему сайту (троника) есть замечание. Может помните, когда то коммент делал, а он на следующий день слетел, но Вы здесь в теме дали разъяснение на тот вопрос. Вот вчера на страничке с интеграцией с JComments оставил коммент, а сегодня он слетел. Писал как аноним. Похоже так много комментов у вас улетает.
И ещё. Разместите пожалуйста на странице компонента или где в менюшке ссылку на интеграцию с JComments, а то эту запись можно найти только через поиск и это только потому что я знал, что запись есть.

В остальном всё отлично:
Joomla! - 3.6.4
Версия PHP - 7.0.11
Интеграция со SLogin и JComments.
Как часики!
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
fandjuml, насчёт сайта, спасибо Вам за замечание :) видимо таки-придётся на платный хостинг переходить. Сейчас я на blogspot. Кстати, на почту я Ваш комментарий получила, странно, что у них опять этот глюканат вышел. Поставила disqus, надеюсь, теперь ничего пропадать не будет

Ссылку размещу, тоже хорошо, что напомнили. Я думала сделать на этот счёт вообще отдельный плагин и выложить его среди других

*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
По просьбам пользователей я добавила в плагин 3 новых поля:
 checkbox - одинарный чекбокс
 checkboxes - несколько чекбоксов, по сути поле соответствует полю списка множественного выбора
 html - произвольный html-код

Поля checkbox и checkboxes генерируются на основе стандартных полей Joomla


*

rixter

  • Захожу иногда
  • 93
  • 9 / 0
  • Кто юзал мой писи?
Здравствуйте!
sherza, огромное спасибо за плагин!

Столкнулся вот с такой "проблемой".
Исходные данные:
- J 2.5 (к сожалению)
- ID администратора 1
- ID пользователя 5

Захожу под пользователем, на странице ред.профиля открываю ссылку "изменить аватар" в новом окне, меняю ID в конце ссылки с 5 на 1 и обновляю страницу. Загружаю и сохраняю аватар, в ответ "Error error|ACCESS DENIED success http://сайт/media/plg_zygo_profile/1/tmp_large1110919224.jpg,400,250". В указанной папке действительно появляется файл tmp_large1110919224.jpg. Настораживает меня этот момент, есть основания для беспокойства?
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
rixter, спасибо, что обратили внимание. Я поправила этот момент.
Напортить чужому пользователю ваш пользователь при таком раскладе не мог, но вот намусорить в папке - это верно.
*

rixter

  • Захожу иногда
  • 93
  • 9 / 0
  • Кто юзал мой писи?
Заменил zygo_profile.php и avatar_showform.php новыми (вроде бы только они исправлены если верить гитхабу).
Удалил аватар у пользователя, сохранил профиль, захожу в изменить аватар, вместо кнопки загрузить - ACCESS DENIED. Под админом все норм.
*

rixter

  • Захожу иногда
  • 93
  • 9 / 0
  • Кто юзал мой писи?
sherza, спасибо! Работает как надо.
*

Mick_20

  • Давно я тут
  • 831
  • 3 / 0
  • Кручу мучу... заработать хочу.
Подскажите пожалуйста как хранятся данные полей?
Не могу найти в БД нужную таблицу.
*

Mick_20

  • Давно я тут
  • 831
  • 3 / 0
  • Кручу мучу... заработать хочу.
Не помешала бы наверное еще возможность объединять поля в группы (филдсеты) и именовать эти группы(задавать legend).

Например:
Домашний адрес (список полей)
Рабочий адрес (список полей)
Социальные сети (список полей)

Хотя может быть это возможно реализовать вручную. Я не знаю как.
Подскажите, если знаете.
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Mick_20, я вам подскажу, как сделать вручную, но для этого мне нужно знать, существует ли у вас файлы
templates/_ваш_шаблон_сайта_/html/com_users/registration/default.php и 
templates/_ваш_шаблон_сайта_/html/com_users/profile/default_custom.php?
Если хотя бы один из данных файлов лежит по указанному пути, приведите его содержимое
*

Mick_20

  • Давно я тут
  • 831
  • 3 / 0
  • Кручу мучу... заработать хочу.
Mick_20, я вам подскажу, как сделать вручную, но для этого мне нужно знать, существует ли у вас файлы
templates/_ваш_шаблон_сайта_/html/com_users/registration/default.php и 
templates/_ваш_шаблон_сайта_/html/com_users/profile/default_custom.php?
Если хотя бы один из данных файлов лежит по указанному пути, приведите его содержимое

Мне бы на странице редактирования в профиле )
Но файл страницы регистрации в шаблоне переопределен (.../com_users/registration/default.php)
Спойлер
[свернуть]
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Mick_20, в вашем случае проще всего сделать так (Необходимо заполнить массив $zygo_data по-своему):

Код: php
<?php
// uniqueID2, uniqueID6 - поля расширенного профиля, ПЕРЕД которыми
// должен начинаться новый fieldset
// Значения id (2, 6) можно увидеть в админ-панели плагина при редактировании
// дополнительных полей

// Заголовок 1, Заголовок 2 - текст legend в fieldset

$zygo_data = array(
"uniqueID2" => "Заголовок 1",
"uniqueID6" => "Заголовок 2"
);
$zygo_count = 0;

?>
<div class="registration<?php echo $this->pageclass_sfx?>">
<?php if ($this->params->get('show_page_heading')) : ?>
<div class="page-header">
<h1><?php echo $this->escape($this->params->get('page_heading')); ?></h1>
</div>
<?php endif; ?>
 
<form id="member-registration" action="<?php echo JRoute::_('index.php?option=com_users&task=registration.register'); ?>" method="post" class="form-validate form-horizontal well" enctype="multipart/form-data">
<?php // Iterate through the form fieldsets and display each one. ?>
<?php foreach ($this->form->getFieldsets() as $fieldset): ?>
<?php $fields = $this->form->getFieldset($fieldset->name);?>
<?php if (count($fields)):?>

<?php if ($fieldset->name != "zygo_profile"): ?>

<fieldset>
<?php // If the fieldset has a label set, display it as the legend. ?>
<?php if (isset($fieldset->label)): ?>
<legend><?php echo JText::_($fieldset->label);?></legend>
<?php endif;?>

<?php endif; ?>


<?php // Iterate through the fields in the set and display them. ?>
<?php foreach ($fields as $field) : ?>

<?php if ($fieldset->name == "zygo_profile" &&
isset($zygo_data[$field->getAttribute("name")])):

if ($zygo_count > 0) echo "</fieldset>";

$zygo_count++; ?>

<fieldset>
<legend>
<?php echo $zygo_data[$field->getAttribute("name")]; ?>
</legend>

<?php endif; ?>

<?php // If the field is hidden, just display the input. ?>
<?php if ($field->hidden): ?>
<?php echo $field->input;?>
<?php else:?>
<div class="control-group">
<div class="control-label">
<?php echo $field->label; ?>
<?php if (!$field->required && $field->type != 'Spacer') : ?>
<span class="optional"><?php echo JText::_('COM_USERS_OPTIONAL');?></span>
<?php endif; ?>
</div>
<div class="controls">
<?php echo $field->input;?>
</div>
</div>
<?php endif;?>
<?php endforeach;?>
</fieldset>
<?php endif;?>
<?php endforeach;?>
<div class="control-group">
<div class="controls">
<!--button type="submit" class="btn btn-primary validate"><?php //echo JText::_('JREGISTER');?></button-->
<span class="btn btn-primary">Регистрация</span>
<a class="btn" href="<?php echo JRoute::_('');?>" title="<?php echo JText::_('JCANCEL');?>"><?php echo JText::_('JCANCEL');?></a>
<input type="hidden" name="option" value="com_users" />
<input type="hidden" name="task" value="registration.register" />
</div>
</div>
<?php echo JHtml::_('form.token');?>
</form>
</div>
*

Mick_20

  • Давно я тут
  • 831
  • 3 / 0
  • Кручу мучу... заработать хочу.
Mick_20, в вашем случае проще всего сделать так (Необходимо заполнить массив $zygo_data по-своему):

Спасибо вам большое, Зья, если не ошибся ))

А можно еще вопрос. Реально ли сделать такую валидацию:

Чтобы пользователь надо было обязательно заполнить либо все поля в домашнем адресе, либо все поля в адресе работы?

Т.е. мне не надо чтобы все эти поля были обязательны, но если уж начал заполнять, то все поля в адресе укажи.
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Mick_20, я бы вам подсказала, какой javascript добавить, но для этого нужно знать, как минимум, какой у вас механизм валидации.
Что у вас обрабатывает событие click по элементу
Код: html4strict
<span class="btn btn-primary">Регистрация</span>
?
*

Mick_20

  • Давно я тут
  • 831
  • 3 / 0
  • Кручу мучу... заработать хочу.
Mick_20, я бы вам подсказала, какой javascript добавить, но для этого нужно знать, как минимум, какой у вас механизм валидации.
Что у вас обрабатывает событие click по элементу
Код: html4strict
<span class="btn btn-primary">Регистрация</span>
?

Я ничего не добавлял еще.
Шаблон стандартный protostar.
« Последнее редактирование: 12.12.2016, 18:49:46 от Mick_20 »
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Mick_20, фрагмент кода темплейта .../com_users/registration/default.php, который вы выше предоставили,
Код: php
<!--button type="submit" class="btn btn-primary validate"><?php //echo JText::_('JREGISTER');?></button-->
<span class="btn btn-primary">Регистрация</span>
указывает на то, что с шаблоном после установки поработали :)
*

Mick_20

  • Давно я тут
  • 831
  • 3 / 0
  • Кручу мучу... заработать хочу.
Mick_20, фрагмент кода темплейта .../com_users/registration/default.php, который вы выше предоставили,
Код: php
<!--button type="submit" class="btn btn-primary validate"><?php //echo JText::_('JREGISTER');?></button-->
<span class="btn btn-primary">Регистрация</span>
указывает на то, что с шаблоном после установки поработали :)
А, да это я просто кнопку так отключил, чтобы не могли регистрироваться на время разработки.
Но валидацию конечно на стандартную кнопку надо  ^-^
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
В вашем случае (стандартный шаблон, заполнение группы  текстовых полей) можно было бы сделать следующее:
(я временно вернула стандартный submit)

Код: php
<?php

// uniqueID2, uniqueID6 - поля расширенного профиля, ПЕРЕД которыми
// должен начинаться новый fieldset
// Значения id (2, 6) можно увидеть в админ-панели плагина при редактировании
// дополнительных полей

// Заголовок 1, Заголовок 2 - текст legend в fieldset

$zygo_data = array(
"uniqueID2" => "Заголовок 1",
"uniqueID6" => "Заголовок 2"
);
$zygo_count = 0;


$document = JFactory::getDocument();
$document->addScriptDeclaration(
' jQuery(document).ready(function($) {

$(".zygo_fieldset .controls>input").click(function(){
   zygo_validate(this);
}).keypress(function(){
   zygo_validate(this);
}).keyup(function(){
   zygo_validate(this);
});

function zygo_validate(self){

var zygo_fset = $(self).closest(".zygo_fieldset");
var zygo_inputs = zygo_fset.find(".controls>input[type=\'text\']");
var zygo_labels = zygo_fset.find(".control-label label");


if(self.value){
zygo_inputs.addClass("required").attr(
{"aria-required": true, "required" : "" });

zygo_labels.addClass("required");

if(!zygo_labels.find(".star")[0]){
zygo_labels.append("<span class=\'star\'> *</span>");
}

zygo_fset.find(".control-label .optional").hide();

}else{
var other_inputs_clean = true;

zygo_inputs.each(function(index, el){
if(el.value){
other_inputs_clean = false;
return;
}
});

if(other_inputs_clean){

zygo_inputs.removeClass("required").removeClass("invalid").removeAttr( "aria-required" )
.removeAttr( "required" );

zygo_labels.removeClass("required").removeClass("invalid");
zygo_labels.find(".star").remove();

zygo_fset.find(".control-label .optional").show();


}
}
}

});

'
);

?>
<div class="registration<?php echo $this->pageclass_sfx?>">
<?php if ($this->params->get('show_page_heading')) : ?>
<div class="page-header">
<h1><?php echo $this->escape($this->params->get('page_heading')); ?></h1>
</div>
<?php endif; ?>
 
<form id="member-registration" action="<?php echo JRoute::_('index.php?option=com_users&task=registration.register'); ?>" method="post" class="form-validate form-horizontal well" enctype="multipart/form-data">
<?php // Iterate through the form fieldsets and display each one. ?>
<?php foreach ($this->form->getFieldsets() as $fieldset): ?>
<?php $fields = $this->form->getFieldset($fieldset->name);?>
<?php if (count($fields)):?>

<?php if ($fieldset->name != "zygo_profile"): ?>

<fieldset>
<?php // If the fieldset has a label set, display it as the legend. ?>
<?php if (isset($fieldset->label)): ?>
<legend><?php echo JText::_($fieldset->label);?></legend>
<?php endif;?>

<?php endif; ?>


<?php // Iterate through the fields in the set and display them. ?>
<?php foreach ($fields as $field) : ?>

<?php if ($fieldset->name == "zygo_profile" &&
isset($zygo_data[$field->getAttribute("name")])):

if ($zygo_count > 0) echo "</fieldset>";

$zygo_count++; ?>

<fieldset class="zygo_fieldset">
<legend>
<?php echo $zygo_data[$field->getAttribute("name")]; ?>
</legend>

<?php endif; ?>

<?php // If the field is hidden, just display the input. ?>
<?php if ($field->hidden): ?>
<?php echo $field->input;?>
<?php else:?>
<div class="control-group">
<div class="control-label">
<?php echo $field->label; ?>
<?php if (!$field->required && $field->type != 'Spacer') : ?>
<span class="optional"><?php echo JText::_('COM_USERS_OPTIONAL');?></span>
<?php endif; ?>
</div>
<div class="controls">
<?php echo $field->input;?>
</div>
</div>
<?php endif;?>
<?php endforeach;?>
</fieldset>
<?php endif;?>
<?php endforeach;?>
<div class="control-group">
<div class="controls">
<button type="submit" class="btn btn-primary validate"><?php echo JText::_('JREGISTER');?></button>
<!--span class="btn btn-primary">Регистрация</span-->
<a class="btn" href="<?php echo JRoute::_('');?>" title="<?php echo JText::_('JCANCEL');?>"><?php echo JText::_('JCANCEL');?></a>
<input type="hidden" name="option" value="com_users" />
<input type="hidden" name="task" value="registration.register" />
</div>
</div>
<?php echo JHtml::_('form.token');?>
</form>
</div>
*

Mick_20

  • Давно я тут
  • 831
  • 3 / 0
  • Кручу мучу... заработать хочу.
В вашем случае (стандартный шаблон, заполнение группы  текстовых полей) можно было бы сделать следующее:
(я временно вернула стандартный submit)

Спойлер
[свернуть]

Добавил данный код и не сработало.
Код: php
$document = JFactory::getDocument();
$document->addScriptDeclaration(
...
);

А поля изначально должны быть обязательны для заполнения? Или без разницы?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Бесплатная система фильтрации полей Joomla

Автор zikkuratvk

Ответов: 178
Просмотров: 8949
Последний ответ 16.06.2019, 19:52:40
от AlekVolsk
Плагин Яндекс Доставка для VirtueMart 3

Автор draff

Ответов: 2
Просмотров: 72
Последний ответ 14.06.2019, 16:06:59
от draff
SM FAQ - компонент Вопрос-Ответ для Joomla 2.5+

Автор SmokerMan

Ответов: 677
Просмотров: 113730
Последний ответ 11.06.2019, 13:30:36
от roymustafa
SW JProjects - Менеджер цифровых проектов для CMS Joomla!™

Автор Septdir

Ответов: 10
Просмотров: 565
Последний ответ 28.05.2019, 13:08:01
от Septdir
JYProExtra - Улучшения для Joomla YooThemePRO

Автор Septdir

Ответов: 3
Просмотров: 278
Последний ответ 27.05.2019, 17:32:36
от Septdir