Новости Joomla

Вышли релизы Joomla 6.1 и Joomla 5.4.5: новые возможности и стабильность

Релиз Joomla 6.1.0

Проект Joomla! объявил о доступности Joomla 6.1 [Nyota] — новой минорной версии шестой серии, а также о выпуске релиза исправлений ошибок Joomla 5.4.5. Релиз 6.1 приносит ряд долгожданных функций, повышающих удобство управления контентом и защиту от спама.

👩‍💻 Компонент "CS Афиши" для Joomla.

👩‍💻 Компонент "CS Афиши" для Joomla.

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

В состав пакета расширений входят:
- Компонент "CS Афиши"
- Модуль "Календарь событий"
- Модуль "Предстоящие события"
- Библиотека "ImgResize"

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

Модуль "Календарь событий" отображает предстоящие и прошедшие мероприятие на календаре, с отображением мероприятий на конкретную дату во всплывающем окне.

Модуль "Предстоящие события" показывает список предстоящий событий по порядку их наступления.

P.S. Расширение платное, но плата символическая, чисто для отработки приема платежей. Ключи без ограничения по времени, купившие сейчас - смогут обновляться без ограничений.

Разработчик - участник нашего сообщества Дмитрий Денисов (@codersite).

Страница расширения
Демо

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

moonaway

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Как-то было делать нечего и я решил исправить ту вопиющую несправедливость, которая возникла с дружбой AdsManager и JomSocial. C CommunityBuilder дружит нативно, а с JomSocial нет. Казалось бы, что сложного брать поля из JS так же как из CB? Но на самом деле все упирается в то, что поля AdsManager изначально были построены по архитектуре поле CommunityBuilder - они имеют совершенно одинаковые таблицы! Засада, но мы не унываем и планомерно дорабатываем штатные функции до рабочего состояния.
Полную работоспособность данного решения я не гарантирую, но максимальную подгонку обещать могу.

Итак, дано: JomSoical 4.2.5 и AdsManager 3.1.6 Gold.

Что нам нужно?
- Чтобы вот тут в бекенде:

И на фронтенде соответственно брались нужные значения из указанных полей JS.

Делаем следующие:
1. берем файл \components\com_adsmanager\views\edit\view.html.php
и в строке, где берутся доп.поля профиля из CB мы берем поля из профиля JS новой функцией getJSProfile по аналогии с getCBProfile
Код
if ($conf->comprofiler == 0) {	
$profile = $usermodel->getProfile($user->id);
} else {
if (COMMUNITY_BUILDER == 1) {
$profile = $usermodel->getCBProfile($user->id);
}
if (JOMSICAL == 1) {
$profile = $usermodel->getJSProfile($user->id);
} else {
$profile = new stdClass();
}
}

2. Создаем новую функцию  getJSProfile рядом с getCBProfile в \administrator\components\com_adsmanager\models\user.php
Код
function getJSProfile($userid) {
$this->_db->setQuery("SELECT u.name AS name, u.email as email FROM #__users AS u WHERE u.id=".(int)$userid);
$user = $this->_db->loadObject();
$this->_db->setQuery("SELECT fv.value AS value, f.name AS cbname FROM d44qz_adsmanager_fields AS f LEFT JOIN d44qz_community_fields_values AS fv ON f.cb_field = fv.field_id WHERE f.cb_field !='-1' AND f.published = 1 AND fv.user_id =".(int)$userid);
$rows = $this->_db->loadObjectList();
$new = array();

foreach ($rows as $row) {
$new[$row->cbname] = $row->value;
}

$user = (object)(array_merge((array)$user, $new));

return $user;
}

3. в файле \administrator\components\com_adsmanager\models\content.php
находим getContents и дописываем условие для JS
Код
function getContents($filters = null,$limitstart=null,$limit=null,$filter_order=null,$filter_order_Dir=null,$admin=0,$favorite=0) {
$sql = "SELECT a.*, p.name as parent, p.id as parentid, c.name as cat, c.id as catid,u.username as user,u.name as fullname ".
" FROM #__adsmanager_ads as a ".
" INNER JOIN #__adsmanager_adcat as adcat ON adcat.adid = a.id ";
if (COMMUNITY_BUILDER == 1)
$sql .= " LEFT JOIN #__comprofiler as cb ON cb.user_id = a.userid ";
if (JOMSOCIAL == 1)
$sql .= " LEFT JOIN #__community_users as cb ON cb.userid = a.userid ";
$sql .= " LEFT JOIN #__users as u ON a.userid = u.id ".
" INNER JOIN #__adsmanager_categories as c ON adcat.catid = c.id ".
" LEFT JOIN #__adsmanager_categories as p ON c.parent = p.id ";
не помню зачем эта функция и работает ли она в моем случае специально не проверял)))) но, по логике должна...

4. \administrator\components\com_adsmanager\views\admin\view.html.php
Эта функция нужна для того, что в админке правильные поля выводились. В районе 811 строки находим получение значений функцией getAllCbFields() и дописываем условия
Код
$cb_fields = $fieldmodel->getAllCbFields();
$cbfields[] = JHTML::_('select.option', '-1', JText::_('ADSMANAGER_NOT_USED') );
if (isset($cb_fields))
{
foreach($cb_fields as $cb)
{
if (COMMUNITY_BUILDER == 1)
$cbfields[] = JHTML::_('select.option', $cb->fieldid, "(".$cb->fieldid.") ".$cb->name );
if (JOMSOCIAL == 1)
$cbfields[] = JHTML::_('select.option', $cb->id, "(".$cb->id.") ".$cb->name );
}
}
тут можно было, конечно, просто исправить функцию getAllCbFields(), чтобы она сразу отдавала базу с fieldid, а не id, но поздно дошло, а уже лень. Да и так проще понять как это всё работает:)

так же там есть в районе 461 строки кусок кода, которые получает значения полей
Код
foreach($fields as $field) {
if ($field->cbfieldvalues != "-1")
{
/*get CB value fields */
$cbfieldvalues = $fieldmodel->getCBFieldValues($field->cbfieldvalues);
$field_values[$field->fieldid] = $cbfieldvalues;
}
}
но его мы не правим. Просто любуемся и понимаем, что нужно менять ещё и getCBFieldValues();

5. вздыхаем и идём в \administrator\components\com_adsmanager\models\field.php
около 522 строки видим и правим вышеуказанные функции getAllCbFields() и getCBFieldValues()
Код
function getAllCbFields() {
$config = JFactory::getConfig();
$dbprefix = JOOMLA_J3 ? $config->get('dbprefix') : $config->getValue('config.dbprefix');

if (COMMUNITY_BUILDER == 1)
$this->_db->setQuery("SHOW TABLES LIKE '".$dbprefix."comprofiler_fields'"  );
if (JOMSOCIAL == 1)
$this->_db->setQuery("SHOW TABLES LIKE '".$dbprefix."community_fields'"  );
$tables = $this->_db-> loadObjectList();
if (count($tables) > 0) {
if (COMMUNITY_BUILDER == 1)
$this->_db->setQuery("SELECT * FROM #__comprofiler_fields WHERE 1"  );
if (JOMSOCIAL == 1)
$this->_db->setQuery("SELECT * FROM #__community_fields WHERE fieldcode !='' "  );
$cb_fields = $this->_db-> loadObjectList();
return $cb_fields;
}
else
return array();
}

Код
	function getCBFieldValues($fieldcbid) {
if (JOMSOCIAL == 1) {
$this->_db->setQuery( "SELECT * FROM #__community_fields WHERE id = ".(int)$fieldcbid." ORDER by ordering ");
$index = $this->_db->loadObject();
$values = explode("\n", $index->options);

$cbfieldvalues = array();
foreach ($values as $key => $val) {
$cbfieldvalues[$key] = new stdClass();
$cbfieldvalues[$key]->fieldvalueid = $key;
$cbfieldvalues[$key]->fieldid = $index->id;
$cbfieldvalues[$key]->fieldtitle = $val;
$cbfieldvalues[$key]->fieldlabel = '';
$cbfieldvalues[$key]->ordering = $key;
$cbfieldvalues[$key]->sys = 0;
$cbfieldvalues[$key]->fieldvalue = $val;
}
return $cbfieldvalues;
}
if (COMMUNITY_BUILDER == 1) {
$this->_db->setQuery( "SELECT *, fieldtitle as fieldvalue FROM #__comprofiler_field_values WHERE fieldid = ".(int)$fieldcbid." ORDER by ordering ");
$cbfieldvalues = $this->_db->loadObjectList();
return $cbfieldvalues;
}
}

а так же в районе строки 267 разглядываем функцию getFieldValues которой требуется getCBFieldValues(), но не трогаем. Так как и так всё хорошо:)


У меня в итоге из JS берется откуда надо и вставляется куда надо все поля по аналогии с CB.

Самая фигня состоит в том, что у таблиц полей JS и СB cовершенно разная архитектура. И если у значения поля CB есть и fieldtitle и fieldvalueid и ordering, тот в полях JS ничего этого нет. Поэтому в функции getCBFieldValues их проходится просто эмулировать:) Что совершенно не сказывается на работоспособности.
В функции getJSProfile же получится совершенно дикий запрос сразу к трем таблица, вместо двух последовательных к CB да и потом функция разворота массива не добавляет  красоты. Кто знает, как сделать это проще - прошу в комментарии
« Последнее редактирование: 11.11.2016, 21:06:49 от moonaway »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Заглушки с http://placehold.it вместо картинок в списке объявлений

Автор efimov777

Ответов: 6
Просмотров: 6664
Последний ответ 12.04.2020, 07:25:59
от Pavel
Вывод картинки поля "radioimage"

Автор Pavel

Ответов: 7
Просмотров: 4651
Последний ответ 12.03.2019, 16:23:10
от Pavel
Не выводятся поля при просмотре с телефона

Автор Den85

Ответов: 0
Просмотров: 2138
Последний ответ 16.01.2019, 15:17:05
от Den85
Как вытащить id значения поля?

Автор Fetka

Ответов: 9
Просмотров: 1985
Последний ответ 20.02.2018, 15:41:55
от effrit
Как в Adsmanager'е выделить цветом объявление с определенным значением поля?

Автор Fetka

Ответов: 1
Просмотров: 16681
Последний ответ 20.02.2018, 00:30:44
от Fetka