В Виджете Список контента только с фото

ЕСТЬ РЕШЕНИЕ InstantCMS 2.X

необходимо добавить условие "с фото"

#1 26 июня 2022 в 18:28

Доброго дня!

Как прописать условие чтобы виджет Список контента показывал записи только с фото $image_field ???

widget.php

  1. <?php if ($parents){
  2. foreach($parents as $parent){
  3. if ($parent['id'] == $relation_id){
  4.  
  5. $filter = "r.parent_ctype_id = {$current_ctype['id']} AND ".
  6. "r.parent_item_id = {$current_ctype_item['id']} AND ".
  7. "r.child_ctype_id = {$ctype_id} AND ".
  8. "r.child_item_id = i.id";
  9.  
  10. $this->disableCache();
  11.  
  12. $model->joinInner('content_relations_bind', 'r', $filter);
  13.  
  14. $this->title = string_replace_keys_values($this->title, $current_ctype_item);
  15.  
  16. $this->links = str_replace('{list_link}', href_to($current_ctype['name'], $current_ctype_item['slug'], "view-{$ctype['name']}"), $this->links);
  17.  
  18. break;
  19.  
  20. }
#2 26 июня 2022 в 18:45

Использовать это поле вместо стандартного, если поле Изображение:

Или это, если «Набор изображений»:

Добавить в ТК набор с фильтром по этому полю, применить в виджете фильтр из набора.

#3 26 июня 2022 в 19:09

 Нифигаccе о-го-гошеньки, спасибо, но в том то и дело, что уже использую несколько измененный набор изображений от Goodmade

Поэтому хотелел для виджета условие добавить чтобы только с изображением. Только не знаю как синтаксис AND "...."

Или так не получится? и только к моему набору фильтр приделывать?

#4 27 июня 2022 в 12:34

А что такое $image_field? Если это поле и оно есть в массиве записи, то легче в шаблоне условие прописать.

#5 28 июня 2022 в 08:32

 denmois, а вариант создать набор в котором это поле заполнено и вывести этот набор в виджете не пробовали?

#6 28 июня 2022 в 16:08

А что такое $image_field? Если это поле и оно есть в массиве записи, то легче в шаблоне условие прописать.

Lora

Если $image_field не установлена — изображения нет (проверял)

Тут делается выборка из базы, но не пойму как условие добавить в $filter в плане синтаксиса. Если поставить условие в шаблоне то будет выводиться так: Например в настройках виджета выводить 20 записей, из них 17 с изображениями и выведет только 17!

Добавлено спустя 7 минут

 denmois, а вариант создать набор в котором это поле заполнено и вывести этот набор в виджете не пробовали?

Loadырь

Именно это и подсказывал  Нифигаccе о-го-гошеньки, но проблема в том, что для этого поля (измененное набор изображений) не предусмотрено фильтра в наборе. Поэтому вижу только вариант с правками виджета

#7 28 июня 2022 в 16:26

проблема в том, что для этого поля (измененное набор изображений) не предусмотрено фильтра в наборе

denmois

Можно попробовать сделать, если не боитесь))

Откройте файл system/fields/поле.php

Там есть строка public $title… После этой строки вставьте 

  1. public $filter_type = 'str';

А в строке 

  1. public $allow_index = false;

замените false на true. А если такой строки нет, то добавьте. Может сработать.

#8 28 июня 2022 в 16:43

Так и не понял, что такое $image_field. Но если это какой то флаг или тп, то просто в шаблоне виджета пропишите после

  1. <?php foreach($items as $item) { ?>
  1. <?php if(!$image_field) continue;?>
#9 29 июня 2022 в 10:25

замените false на true. А если такой строки нет, то добавьте. Может сработать.

Нифигаccе о-го-гошеньки

Это не нужно. К тому же индексы на текстовые поля не на всех БД работают одинаково. Достаточно прописать эти два метода github.com/instantsoft/icms2/blob/master/system/fields/images.php#L226

  1. public function getFilterInput($value = false) {
  2. return html_checkbox($this->name, (bool) $value);
  3. }
  4.  
  5. public function applyFilter($model, $value) {
  6. return $model->filterNotNull($this->name);
  7. }
  8.  

и появится кнопка вывода в фильтре.

#10 30 июня 2022 в 13:57
  1. public function getFilterInput($value = false) {
  2. return html_checkbox($this->name, (bool) $value);
  3. }
  4.  
  5. public function applyFilter($model, $value) {
  6. return $model->filterNotNull($this->name);
  7. }
  8.  

и появится кнопка вывода в фильтре.

Loadырь

Эти методы оказываются уже были

  1. public $filter_type = 'str';

А в строке 

  1. public $allow_index = false;

замените false на true. А если такой строки нет, то добавьте. Может сработать.

Нифигаccе о-го-гошеньки

Спасибо, сработало

public $filter_type = 'str';  включает фильтр в настройках поля и в списке записей

public $allow_index = true;  включает возможность фильтрации в наборах

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.