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

antarey

  • Захожу иногда
  • 168
  • 1 / 0
В статье есть дополнительное поле.
Для фильтра использую JL Content Fields Filter https://joomline.ru/rasshirenija/moduli/jlcontentfieldsfilter.html
Как бы работает, но у меня есть статьи в архиве, и модуль их в упор не видит.
Как переделать запрос, чтобы выводились статьи из архива?
вот код mod_jlcontentfieldsfilter.php
Код
<?php
/**
 * JL Content Fields Filter
 *
 * @version 1.7.0
 * @author Joomline
 * [member=126442]copyright[/member] (C) 2017-2019 Arkadiy Sedelnikov, Joomline. All rights reserved.
 * @license GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

// Include the helper.
require_once __DIR__ . '/helper.php';
require_once JPATH_ROOT. '/components/com_content/helpers/route.php';

$app = JFactory::getApplication();
$input = $app->input;

$option = $input->getString('option', '');
$view = $input->getString('view', '');
$catid = $input->getInt('catid', 0);
$id = $input->getInt('id', 0);

if($view == 'category')
{
$catid = $id;
}

$jlContentFieldsFilter = $app->getUserStateFromRequest($option.'.cat_'.$catid.'.jlcontentfieldsfilter', 'jlcontentfieldsfilter', array(), 'array');

$allowedCats = $params->get('categories', array());
$allowedContactCats = $params->get('contact_categories', array());
$moduleclass_sfx = $params->get('moduleclass_sfx', '');
$form_method = $params->get('form_method', 'post');
$autho_send = (int)$params->get('autho_send', 0);
$ajax = (int)$params->get('ajax', 0);
$ajax_selector = $params->get('ajax_selector', '#content');
$enableOrdering = $params->get('enable_ordering', 0);
$ajax_loader = $params->get('ajax_loader', '');
$ajax_loader = !empty(($ajax_loader))? JUri::root().$ajax_loader : '';
$ajax_loader_width = (int)$params->get('ajax_loader_width', 32);

if(
!in_array($option, array('com_content', 'com_contact'))
    || ($option == 'com_content' && !(!count($allowedCats) || in_array($catid, $allowedCats) || $allowedCats[0] == -1))
    || ($option == 'com_contact' && !(!count($allowedContactCats) || in_array($catid, $allowedContactCats) || $allowedContactCats[0] == -1))
|| $catid == 0
)
{
    return;
}
if($option == 'com_content'){
$action = JRoute::_(ContentHelperRoute::getCategoryRoute($catid));
}
else{
$action = JRoute::_(ContactHelperRoute::getCategoryRoute($catid));
}

$fields = ModJlContentFieldsFilterHelper::getFields($params, $catid, $jlContentFieldsFilter, $module->id, $option);

if(count($fields)){
if($enableOrdering){
$selectedOrdering = !empty($jlContentFieldsFilter['ordering'])? $jlContentFieldsFilter['ordering'] : '';
$orderingSelect = ModJlContentFieldsFilterHelper::getOrderingSelect($selectedOrdering, $module->id, $option);
}
require JModuleHelper::getLayoutPath('mod_jlcontentfieldsfilter', $params->get('layout', 'default'));
}

и хелпер
Код
<?php
/**
 * JL Content Fields Filter
 *
 * @version 1.7.0
 * @author Joomline
 * [member=126442]copyright[/member] (C) 2017-2019 Arkadiy Sedelnikov, Joomline. All rights reserved.
 * @license GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

require_once JPATH_ROOT. '/administrator/components/com_fields/helpers/fields.php';

class ModJlContentFieldsFilterHelper
{
public static function getFields($params, $category_id, $values, $moduleId, $option)
{
$app = JFactory::getApplication();
$fields = array();
$template = $app->getTemplate();

$context = '';

if($option == 'com_content'){
$context = 'com_content.article';
}
else if($option == 'com_contact'){
$context = 'com_contact.contact';
}


$item = new stdClass();
$item->language = $app->getLanguage()->getTag();
$item->catid = $category_id;

$fields = FieldsHelper::getFields($context, $item);
if(count($fields)){
$fieldIds = array_map(
function ($f)
{
return $f->id;
},
$fields
);

$new = array();
            $usedFieldIds = array();

foreach ($fields as $key => $original)
{
    if(in_array($original->id, $usedFieldIds)){
        continue;
                }
                $usedFieldIds[] = $original->id;
$field = clone $original;
$field->value = isset($values[$field->id])? $values[$field->id] : '';
$field->rawvalue = $field->value;

$content_filter = $original->params->get('content_filter', '');

$disabled_categories = $original->params->get('disabled_categories', array());
if (in_array($category_id, $disabled_categories))
{
continue;
}

if(empty($content_filter)){
unset($fieldIds[$key]);
continue;
}

$filter_layout = $original->params->get('filter_layout', '');
if(!empty($filter_layout)) {
$filter_layout = explode(':', $filter_layout);
$src = $filter_layout[0];
$layout = $filter_layout[1];
}
else {
$layout = $content_filter;
$src = '_';
}

$basePath = $src === '_'
? (
is_file(JPATH_ROOT.'/templates/'.$template.'/html/layouts/mod_jlcontentfieldsfilter/'.$layout.'.php')
? JPATH_ROOT.'/templates/'.$template.'/html/layouts'
: JPATH_ROOT.'/modules/mod_jlcontentfieldsfilter/layouts'
)
: (
is_file(JPATH_ROOT.'/templates/'.$src.'/html/layouts/mod_jlcontentfieldsfilter/'.$layout.'.php')
? JPATH_ROOT.'/templates/'.$src.'/html/layouts'
: JPATH_ROOT.'/modules/mod_jlcontentfieldsfilter/layouts'
);

$displayData = array('field' => $field, 'params' => $params, 'moduleId' => $moduleId, 'rangedata' => array());

if(preg_match("/^range?.*?$/isu", $layout)) {
$displayData = self::addRangeData($displayData, $category_id, $option);
}

$new[$key] = JLayoutHelper::render(
'mod_jlcontentfieldsfilter.'.$layout,
$displayData,
$basePath,
array('component' => 'auto', 'client' => 0, 'suffixes' => array())
);
}
$fields = $new;
}
return $fields;
}

private static function addRangeData($displayData, $category_id, $option){
$field = $displayData['field'];
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('MIN(CAST(`value` AS SIGNED)) AS `min`, MAX(CAST(`value` AS SIGNED)) AS `max`')
      ->from('`#__fields_values`')
      ->where('`field_id` ='.(int)$field->id)
      ->where('`field_id` ='.(int)$field->id)
;
$subquery = '';
if($option == 'com_content'){
$subquery = 'SELECT `id` FROM `#__content` WHERE `catid` = '.(int)$category_id;
}
else if($option == 'com_contact'){
$subquery = 'SELECT `id` FROM `#__contact_details` WHERE `catid` = '.(int)$category_id;
}
if(!empty($subquery)){
$query->where('`item_id` IN ('.$subquery.')');
}
$result = $db->setQuery($query)->loadObject();
$displayData['min'] = !empty($result->min)? (int)$result->min : '';
$displayData['max'] = !empty($result->max)? (int)$result->max : '';
return $displayData;
}

public static function getOrderingSelect($selectedOrdering, $moduleId, $option){
$app = JFactory::getApplication();
$template = $app->getTemplate();

$options = array();
if($option == 'com_content'){
$options[] = JHtml::_('select.option', '', JText::_('MOD_JLCONTENTFIELDSFILTER_ORDERING_DEFAULT'));
$options[] = JHtml::_('select.option', 'ordering.asc', JText::_('MOD_JLCONTENTFIELDSFILTER_ORDERING_ASC'));
$options[] = JHtml::_('select.option', 'ordering.desc', JText::_('MOD_JLCONTENTFIELDSFILTER_ORDERING_DESC'));
$options[] = JHtml::_('select.option', 'title.asc', JText::_('MOD_JLCONTENTFIELDSFILTER_TITLE_ASC'));
$options[] = JHtml::_('select.option', 'title.desc', JText::_('MOD_JLCONTENTFIELDSFILTER_TITLE_DESC'));
$options[] = JHtml::_('select.option', 'created.asc', JText::_('MOD_JLCONTENTFIELDSFILTER_CREATED_ASC'));
$options[] = JHtml::_('select.option', 'created.desc', JText::_('MOD_JLCONTENTFIELDSFILTER_CREATED_DESC'));
$options[] = JHtml::_('select.option', 'created_by.asc', JText::_('MOD_JLCONTENTFIELDSFILTER_CREATED_BY_ASC'));
$options[] = JHtml::_('select.option', 'created_by.desc', JText::_('MOD_JLCONTENTFIELDSFILTER_CREATED_BY_DESC'));
$options[] = JHtml::_('select.option', 'hits.asc', JText::_('MOD_JLCONTENTFIELDSFILTER_HITS_ASC'));
$options[] = JHtml::_('select.option', 'hits.desc', JText::_('MOD_JLCONTENTFIELDSFILTER_HITS_DESC'));
}
else if($option == 'com_contact'){
$options[] = JHtml::_('select.option', '', JText::_('MOD_JLCONTENTFIELDSFILTER_ORDERING_DEFAULT'));
$options[] = JHtml::_('select.option', 'ordering.asc', JText::_('MOD_JLCONTENTFIELDSFILTER_ORDERING_ASC'));
$options[] = JHtml::_('select.option', 'ordering.desc', JText::_('MOD_JLCONTENTFIELDSFILTER_ORDERING_DESC'));
$options[] = JHtml::_('select.option', 'name.asc', JText::_('MOD_JLCONTENTFIELDSFILTER_NAME_ASC'));
$options[] = JHtml::_('select.option', 'name.desc', JText::_('MOD_JLCONTENTFIELDSFILTER_NAME_DESC'));
$options[] = JHtml::_('select.option', 'position.asc', JText::_('MOD_JLCONTENTFIELDSFILTER_POSITION_ASC'));
$options[] = JHtml::_('select.option', 'position.desc', JText::_('MOD_JLCONTENTFIELDSFILTER_POSITION_DESC'));
$options[] = JHtml::_('select.option', 'hits.asc', JText::_('MOD_JLCONTENTFIELDSFILTER_HITS_ASC'));
$options[] = JHtml::_('select.option', 'hits.desc', JText::_('MOD_JLCONTENTFIELDSFILTER_HITS_DESC'));
}

$basePath = is_file(JPATH_ROOT.'/templates/'.$template.'/html/layouts/mod_jlcontentfieldsfilter/ordering.php')
? JPATH_ROOT.'/templates/'.$template.'/html/layouts'
: JPATH_ROOT.'/modules/mod_jlcontentfieldsfilter/layouts';

$html = JLayoutHelper::render(
'mod_jlcontentfieldsfilter.ordering',
array('options' => $options, 'selected' => $selectedOrdering, 'moduleId' => $moduleId),
$basePath,
array('component' => 'auto', 'client' => 0)
);

return $html;
}
}

*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Тут запрос в базу менять надо.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

antarey

  • Захожу иногда
  • 168
  • 1 / 0
@Septdir
ето я понял, только на какой, и где? В самом модуле или в joomle?
Архивные статьи от обычных отличаются в поле state=2. Пробовал изменить запрос - не вышло ничего
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
@Septdir
ето я понял, только на какой, и где? В самом модуле или в joomle?
Архивные статьи от обычных отличаются в поле state=2. Пробовал изменить запрос - не вышло ничего
В плагине https://github.com/Joomline/JlContentFieldsFilter/blob/master/plg_system_jlcontentfieldsfilter/models/com_content/category.php
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

antarey

  • Захожу иногда
  • 168
  • 1 / 0
@Septdir
Спасибо завтра посмотрю.
Если я правильно понял - ето переоредиление com_content?
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
@Septdir
Спасибо завтра посмотрю.
Если я правильно понял - ето переоредиление com_content?
Оно самое
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

antarey

  • Захожу иногда
  • 168
  • 1 / 0
@Septdir
Спасибо.
Если можна, поморочу еще немного голову.
Можете указать с какой по какую строку меняли, чтобы не сравнивать весь код.
У меня первично идет фильтр по доп.полю а потом выбор категории статей- как сработает выборка из базы если в фильтре укажу доп.поле статьи из архива и конкретную категорию? Покажутся только категории архива с доп.полем или все статьи с етой категории?
И последний вопрос - можно как-то задать для данного модуля JL Content Fields Filter значение по умолчанию при загрузке страницы?
Заранее спасибо.
*

antarey

  • Захожу иногда
  • 168
  • 1 / 0
Я так понял Вы разработчик расширения?
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Я так понял Вы разработчик расширения?
Не. Просто знаю как оно работает.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

antarey

  • Захожу иногда
  • 168
  • 1 / 0
@Septdir
Я сравнил два файла - все чем они отличаются так ето версией. Вы точно в category.php правили?
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
@Septdir
Я сравнил два файла - все чем они отличаются так ето версией. Вы точно в category.php правили?
Я ничего и не правил. Вам просто скинул файл. Хотя скорее всего придётся вообще articles php переопределять
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

antarey

  • Захожу иногда
  • 168
  • 1 / 0
В смысле articles php самой Joomla?
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
В смысле articles php самой Joomla?
Да потому что сам запрос там.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

antarey

  • Захожу иногда
  • 168
  • 1 / 0
Ясно. Спасибо
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
@antarey я тут подумал. Теоритически можно тут передвать массив (1,2) и тогда будет и архивные выводиться.
https://github.com/Joomline/JlContentFieldsFilter/blob/master/plg_system_jlcontentfieldsfilter/models/com_content/category.php#L242
Но только в условия какие нибудь оберните.
« Последнее редактирование: 11.04.2019, 19:49:40 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

antarey

  • Захожу иногда
  • 168
  • 1 / 0
category_id ето ж вроде категория а не стус архив/не архив
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
category_id ето ж вроде категория а не стус архив/не архив
На одну строку ниже
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Mitriy

  • Захожу иногда
  • 85
  • 0 / 0
Фильтрация происходит с условием AND, а можно ли поменять на OR?
То есть, выводить материалы в которых есть хотя бы одно нужное поле
*

Mitriy

  • Захожу иногда
  • 85
  • 0 / 0

Не. Просто знаю как оно работает.
Фильтрация происходит с условием AND, а можно ли поменять на OR?
То есть, выводить материалы в которых есть хотя бы одно нужное поле
*

Vastriet

  • Захожу иногда
  • 230
  • 6 / 0
посмотрите файлы там поменяйте условие
но если память не тзменяет был выбор и или
*

Mitriy

  • Захожу иногда
  • 85
  • 0 / 0
посмотрите файлы там поменяйте условие
но если память не тзменяет был выбор и или
прошел по файлам - не нашел. Подскажите в каком именно. Есть же модуль, плагин, компонент
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Делаю запрос к базе к полю images, выдает пустые значения а они есть там

Автор Dolphin4ik_1

Ответов: 1
Просмотров: 388
Последний ответ 14.07.2022, 12:48:33
от sivers
Допилить интернет магазин

Автор joker992

Ответов: 1
Просмотров: 281
Последний ответ 02.05.2022, 08:33:14
от NewUsers
Как посчитать материалы в модуле с учетом плагина Content Multicategories?

Автор R31rus

Ответов: 0
Просмотров: 389
Последний ответ 24.11.2021, 13:23:03
от R31rus
Сохранить не удалось из-за ошибки: The content exceeds allowed limits

Автор alexbbb

Ответов: 0
Просмотров: 444
Последний ответ 28.09.2021, 15:02:31
от alexbbb
Фильтр по дате Komento

Автор R31rus

Ответов: 14
Просмотров: 522
Последний ответ 10.09.2021, 21:46:54
от gartes