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

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
Всех с Наступающим!
Возникла экстренная задача: добавить одно дополнительное текстовое поле для категории.
Постоянно пользуюсь Custom Field для материалов, но как провернуть подобное для категорий понятия не имею?
Может у кого-то есть мысли по этому поводу?

Я знаю, что можно сделать это с помощью плагина но сам их писать не умею.
Возможно кто-то для себя писал подобный плагин, и можно его просто переделать...

Всех заранее благодарю!
*

beliyadm

  • Легенда
  • 9425
  • 1645 / 65
  • Севастополь == Россия
Плагина не знаю, можно хардкодно через доп поле в базе данных и пару строк кода в файлах (придется их обновлять при общем обновлении движка, но это не страшно).
Штатного материала для доп полей к категории не встречал, видимо нет его вообще.
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

zikkuratvk

  • Глобальный модератор
  • 4605
  • 329 / 2
  • Обслуживаем проекты - дорого.
Плагина не знаю, можно хардкодно через доп поле в базе данных и пару строк кода в файлах (придется их обновлять при общем обновлении движка, но это не страшно).
Штатного материала для доп полей к категории не встречал, видимо нет его вообще.
В базовых полях есть sql поле, можно сделать любую выборку из базы.
В целом по аналогии можно сделать https://docs.joomla.org/SQL_form_field_type
Хочется уникальное расширение? ===>>>> JoomLine - Разрабатываем расширения под заказ.
Использую хостинг TimeWeb и Reg
*

beliyadm

  • Легенда
  • 9425
  • 1645 / 65
  • Севастополь == Россия
В базовых полях есть sql поле, можно сделать любую выборку из базы.
В целом по аналогии можно сделать https://docs.joomla.org/SQL_form_field_type
ТС хотел сделать доп поле для категории, а не материала, не прокатит, да и при чем тут выборка из базы. Доп поля только для материалов, не для категорий
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
beliyadm, спасибо, что отозвались.
Видимо действительно нет плагина для подобных целей. Довольно долго искал, читал забугорные форумы, и всё бестолку...
Хардкорности, конечно, именно в данном вопросе не хотелось, но видимо придётся именно так сделать.
Попробую разобраться.
*

AlekVolsk

  • Гуру
  • 6900
  • 407 / 4
для категорий возможно подойдёт это: https://github.com/JPathRu/attributes
набор типов полей ограничен и нерасширяем, но вполне применимо для простейших задач
*

zikkuratvk

  • Глобальный модератор
  • 4605
  • 329 / 2
  • Обслуживаем проекты - дорого.
ТС хотел сделать доп поле для категории, а не материала, не прокатит, да и при чем тут выборка из базы. Доп поля только для материалов, не для категорий
Ну какая разница добавит пускай поле в категории, не вижу проблем, они поддерживаются из коробки.

https://s.mail.ru/2LRy/BxoN2y6cD - для тех кто не в курсе :-)
Хочется уникальное расширение? ===>>>> JoomLine - Разрабатываем расширения под заказ.
Использую хостинг TimeWeb и Reg
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
zikkuratvk
Век живи — век учись!  :D
Нереальная благодарность! Понятия не имел о таком функционале из коробки :o
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
Итак, продолжаем борьбу!  ^-^
Создал категорию полей для категории, создал парочку полей в ней.
Всё появилось в соотв. вкладочке. Вбил данные в поля.
Но вот беда: вывести эти данные тем же способом, что я вывожу в материале, увы, не выходит!

В начале шаблона blog.php пишу такое:

Код
$myCustomFields = array();
foreach($this->category->jcfields as $jcfield) {
    $myCustomFields[$jcfield->name] = $jcfield->value;
}

Теперь в нужном месте пишу:

Код
<?php if (isset($myCustomFields['page-h1']) and !empty($myCustomFields['page-h1'])) { ?>
        <h1><?php echo $myCustomFields['page-h1']; ?></h1>
<?php } ?>

И ничего не выводится.
var_dump($myCustomFields) возвращает 'array(0) { }'

У кого-то будут предположения, что я делаю не так?  :'(
*

beliyadm

  • Легенда
  • 9425
  • 1645 / 65
  • Севастополь == Россия
Кстати тоже не знал про доп поля категорий, даже не заглядывал в этот селект, плюс zikkuratvk добавил

Можно сделать проще и хардкодно (все равно нативный код тащит запрос в базу, так что лишней нагрузки не будет)
В шаблоне blog.php пишите
Код
    $db	= JFactory::getDBO();
$query = '
select *
from #__fields_values as fv
where fv.item_id = "'.$this->category->id.'"
';
$db->setQuery($query);
    $rows = $db->loadObjectList();
    foreach ($rows as $row) {
    switch ($row->field_id)
{
case '3':
    $fieldtest = $row->value;
    break;
}
    }
    echo $fieldtest;

Где $row->field_id == 3 это ID доп поля категории (ну или материала, смысл один) и выводите переменную $fieldtest в нужном месте. Если несколько доп полей - делаете несколько кейсов с соответствующими ID полей
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

goga_pgasovav

  • Захожу иногда
  • 271
  • 3 / 0
  • Внимательный джумловод
beliyadm, спасибо!
Я уже сам сделал нечто подобное запросом к БД. Может конечно не так изящно )

Код
$cat_id = $this->category->id;
$db = &JFactory::getDBO();
$id = JRequest::getString('id');
$db->setQuery("SELECT value FROM #__fields_values WHERE item_id = '$cat_id' AND field_id = '28'");
$params = $db->loadResult();

Подсмотрел в phpMyAdmin, что ID моего поля = 28.

Тут конечно не даёт покоя вопрос: почему же для категории не работает стандартное обращение к полю по его имени, что прекрасно работает в материале?
Недоработка разработчиков Joomla?
*

beliyadm

  • Легенда
  • 9425
  • 1645 / 65
  • Севастополь == Россия
Я уже сам сделал нечто подобное запросом к БД. Может конечно не так изящно
Нормальный запрос, но - если поле только одно, если несколько (по аналогии с материалов аля каталог - лучше таскать не по ID поля, а по ID материала в массив).

Почему не работает - даже знать не хочу, мне нативный подход не нравится. В любом случае он тоже делает запрос к БД и при этом не самый оптимальный. Так что в плане нагрузки мы ничего в данном подходе не усугубляем, зато полностью контролируем ситуацию ))

Подсмотрел в phpMyAdmin, что ID моего поля = 28.
Это видно в админке, в разделе полей столбец ID справа в таблице (ну или в режиме редактирования в урле будет), для этого в базу лазить излишне
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

fsv

  • Живу я здесь
  • 2663
  • 384 / 2
даже знать не хочу, мне нативный подход не нравится.
...мы ничего в данном подходе не усугубляем, зато полностью контролируем ситуацию ))
Захардкодив айдишник? Сменился прогер, новый контент-менеджер что-то изменил в админке ("я ничего не трогала")...

Веб-разработка: заказ. Только сложная и объемная разработка. Дорого.
*

beliyadm

  • Легенда
  • 9425
  • 1645 / 65
  • Севастополь == Россия
Захардкодив айдишник? Сменился прогер, новый контент-менеджер что-то изменил в админке ("я ничего не трогала")...
Так ID доп поля и его системное имя (alias) после создания изменить уже нельзя, какая разница как мы на фронте к нему будем обращаться - по коду или имени? Вообще без разницы
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ссылка на материал в своем шаблоне категории

Автор lgmax

Ответов: 2
Просмотров: 71
Последний ответ 13.03.2020, 10:33:58
от lgmax
Вывести id категории в Joomla 3 через Php!

Автор pro777

Ответов: 23
Просмотров: 452
Последний ответ 12.03.2020, 11:14:13
от robert
Блог категории не с первого материала

Автор joy smile

Ответов: 1
Просмотров: 107
Последний ответ 11.03.2020, 20:28:38
от rsn
Запрет вставки url в поле регистрации

Автор m1804

Ответов: 1
Просмотров: 77
Последний ответ 11.03.2020, 14:12:02
от Sgrey
Свой шаблона блога категории

Автор lgmax

Ответов: 4
Просмотров: 148
Последний ответ 09.03.2020, 23:04:52
от lgmax