Новости Joomla

Состоялся Joomla meetup. Москва.Вчера, 10 апреля 2025г. в Москве состоялся мини Joomla-митап

Состоялся Joomla meetup. Москва.Вчера, 10 апреля 2025г. в Москве состоялся мини Joomla-митап

Состоялся Joomla meetup. Москва.Вчера, 10 апреля 2025г. в Москве состоялся мини Joomla-митап. Митап - это неформальная, некоммерческая встреча участников IT-сообщества для обмена опытом, обсуждения общих планов, действий по развитию сообщества.На этой встрече обсудили настоящее и будущее Joomla, глобальные мысли о возможном проведении Joomla Day Russia, а также менее глобальные, но от этого не менее важные и интересные - о создании Joomla User Group (JUG) - Moscow. В рамках JUG обычно проводятся регулярные встречи как оффлайн, так и онлайн или гибридного формата. Обмен опытом, мнениями, дружеская подсказка, сделанная вовремя - это Joomla User Group. Пока что ещё продумываются детали и идёт поиск места для оффлайн-встреч.👩‍💻 Для координации встреч участников сообщества в Москве был создан отдельный чат: гостиницы, станции метро, площадки для проведения мероприятий и кафе/рестораны для их продолжения - в чате Joomla Meetup Moscow. Иногда 10-15 минут личной встречи заменяют несколько часов переписки или телефонных разговоров. Если вы оказались в столице по рабочим или личным делам - пишите, вам будут рады.На фото: Владимир Елисеев @progreccor (разработчик Radical Form и др.), в середине - чета Толкачевых: Диана и Сергей (@sergeytolkachyov, расширения WebTolk, админ чата сообщества) и Владимир Сергиенко (@aixman, маркетолог и разработчик, админ чата сообщества).

Вышли релизы безопасности Joomla 5.2.6 и Joomla 4.4.13

Релиз безопасности Joomla 5.2.6

Проект Joomla спешит сообщить о выпуске Joomla 5.2.6 и Joomla 4.4.13. Это релиз безопасности для серии Joomla 5.2 и релиз безопасности для серии Joomla 4.4.

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

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
в XML компонента? нет
да, в либрарис лежит, называется правильно (иначе бы он мне во вьюхе не показал бы список)
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
правильно, я сам его вот только создал, потому что в стандартный не получается динамически прописать оптионс
И пошли от сложного ) А теперь учим ООП )
Код: php
<?php

include_once JPATH_SITE . '/libraries/joomla/form/fields/checkboxes.php';

/**
 * Class JFormFieldCheckboxesdb
 */
class JFormFieldCheckboxesdb extends JFormFieldCheckboxes
{
/**
* @var string имя поля
*/
protected $type = 'checkboxesdb';

/**
* Если надо переопределить наш инпут если не надо вообще убить метод
* @return string
*/
protected function getInput()
{
return parent::getInput();
}

/**
* Тут вы из базы можете сформировать список ваших чекбоксов
* @return array
*/
protected function getOptions()
{
$options[] = JHtml::_( 'select.option', 1, 'test1', 'value', 'text', false );
$options[] = JHtml::_( 'select.option', 2, 'test2', 'value', 'text', false );
$options[] = JHtml::_( 'select.option', 3, 'test3', 'value', 'text', false );
return $options;
}
}

и сможете через $item->categories= array(1,3); ставить нужные option выделенными!
« Последнее редактирование: 23.12.2014, 20:17:03 от Istaan »
*

SmokerMan

  • Гуру
  • 5291
  • 720 / 26
ну как минимум нужно смотреть что приходить при сохранении
массива тут никакого нет
Код
$html[] = '<input type="checkbox" id="'.$this->id.$i.'" name="'.$this->name.'" value="'.$option->key.'"'.$checked.'/>';
а вот так будет массив
Код
$html[] = '<input type="checkbox" id="'.$this->id.$i.'" name="'.$this->name.'[]" value="'.$option->key.'"'.$checked.'/>';

если там массив при сохранении то нужно смотреть в каком формате он записывается в это поле json или чего там хз.
Чекбокслист имеет свойство checkedOptions, через которое доступно чтение/запись отмеченных в чекбокслисте чекбоксов в виде перечисленных через запятую без пробелов значений.
ничего он не имеет, по крайне мере данное поле что представлено выше
я уже писал нужно делать var_dump($this->value) и смотреть что тут находится, дальше уже разбираться
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
массива тут никакого нет
Код
$html[] = '<input type="checkbox" id="'.$this->id.$i.'" name="'.$this->name.'" value="'.$option->key.'"'.$checked.'/>';
а вот так будет массив
Код
$html[] = '<input type="checkbox" id="'.$this->id.$i.'" name="'.$this->name.'[]" value="'.$option->key.'"'.$checked.'/>';
Угу.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
$options[] = JHtml::_( 'select.option', 1, 'test', 'value', 'text', false );
return $options;
и где мне тут тогда запрос вставлять?


а вот так будет массив
Код
$html[] = '<input type="checkbox" id="'.$this->id.$i.'" name="'.$this->name.'[]" value="'.$option->key.'"'.$checked.'/>';
[] и так добавляются автоматом, ибо multiple включен принудительно
в вашем варианте у каждого оптион на выходе получаем jform[categories][][]
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Cannot call abstract method JFormField::getInput() - ругается на return parent::getInput();, он же у родителя протектед (нашел косяк)
« Последнее редактирование: 23.12.2014, 20:33:33 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
[spoiler title=Формирую оптионс:]
Код: php
  protected function getOptions()
  {
    $src = $this->src;
    if (!empty($src)) {
      $srcs = explode('.',(string)$src,3);
      $tablename = '`#__'.$srcs[0].'`';
      if (isset($srcs[1]) && !empty($srcs[1]))
        $fieldkey = '`'.$srcs[1].'`';
      if (isset($srcs[2]) && !empty($srcs[2]))
        $fieldval = '`'.$srcs[2].'`';
      if (isset($fieldkey) && isset($fieldval)) {
        $db = JFactory::getDBO();
        $query = $db->getQuery(true);
        $query->select($fieldkey.' as `key`, '.$fieldval.' as `value`')->from($tablename);
        $items = $db->setQuery($query)->loadObjectList();
      }
      if (isset($items)) {
        foreach ($items as $i => $item) {
          $option = JHtml::_('select.option', $item->key, (string)$item->value, 'value', 'text', $this->disabled);
          $option->checked = false;
          $option->onclick = $this->onclick;
          $option->onchange = $this->onchange;
          $options[] = $option;
        }
      }
    }
    return $options;
  }
[/spoiler]

$item->categories = array(2,5); - теперь это работает.
« Последнее редактирование: 23.12.2014, 21:14:11 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Как записать теперь массив значений из $item->categories в базу?
Из базы читается нормально, если я напрямую в поле phpMyAdmin пропишу значение '2,5' - нужные оптионс при открытии записи в админке отмечаются корректно, однако при нажатии "сохранить" в базу в это поле ничего не пишется (его значение не меняется).

Для теста делаю:
Код: php
  public function save( $data )
  {
    print_r($data['categories']);
    die();
    return parent::save( $data );
  }
Выводит массив с отмеченными оптионс, однако в базу они не пишутся
« Последнее редактирование: 23.12.2014, 22:58:22 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Догнал, что не так. У меня поле в таблице в базе текстовое, а пытаюсь сохранить массив.
Так работает:
Код: php
  public function save( $data )
  {
    $data['categories'] = implode(',',$data['categories']);
    return parent::save( $data );
  }

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

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
в JSON запихните данные!
Потом в $item->categories  = json_decode('ну и тут переменная с данными');
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Запихнул, в базе получилось ["2","5"] - это то самое?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Запихнул, в базе получилось ["2","5"] - это то самое?
Да)
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Ну вот, уж коли свои типы полей создавать начал, то статус "профи" на форуме наверное не спроста... хотя до реального профи мне еще...
Безграничная благодарность за помощь!

Файл с типом поля во вложении, для добрых людей. Описание атрибута src дано в #10 посту, остальное как в checkboxes. Не комментирован, ну да кому надо - разберутся.
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
В поле:
Код: php
  protected function getInput()
  {
    $input = parent::getInput();
    return $input;
  }
$input - это строка. Как мне ее преобразовать в объект? или как для вывода я могу добавить свой дополнительный HTML внутрь уже имеющегося?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Скопировать то что в родителе и переписать на свой лад )
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Я почему-то так и подумал, что на этом ооп и заканчивается )
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Я почему-то так и подумал, что на этом ооп и заканчивается )
Ну если вам надо расширить действие то подругому увы никак!
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Как я могу подключить поле для его отображения во фронте, отобразить пользователю текущие данные и потом записать изменения без использования xml? при этом в форме будет только id записи и это поле (ну и еще токен), т.е. не вся запись целиком.
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Короче, не могу получить данные в поле из базы во фронте.
Что показать?
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Поле объявлено как:
Код: xml
<field name="cities" type="checkboxesdb" label="" class="well" src="crmt_city.id.city.published=1"/>
Запрос в поле выполняется, выводит норм результат (там всего 2 записи с id=23 и 37, остальные published=0), во фронте поле отображается, value заполнены корректно:
Код: html4strict
fieldset id="cities" class="checkboxes">
    <ul>
        <li>
            <input id="cities0" type="checkbox" value="23" name="cities[]"></input>
            <label for="cities0" aria-invalid="false"></label>
        </li>
        <li>
            <input id="cities1" type="checkbox" value="37" name="cities[]"></input>
            <label for="cities1"></label>
        </li>
    </ul>
</fieldset>
var_dump($this->item->cities) => array(2) {[0]=> string(2) "23" [1]=> string(2) "37" }
но галочки в чекбоксах не стоят!

Где мог накосячить?
При попытке поставить/снять галочку кликом к метке автоматом приписывается aria-invalid="false" - что это может означать?
« Последнее редактирование: 11.01.2015, 23:43:21 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
В общем, хз, что это... я так так и не понял, что не так...
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Весь код checkboxesdb.php:

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

В админке-то работает, во фронте не желает.
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Проверил: в getInput() перед циклом перебора оптионс:
var_dump($this->value); => string(0) ""
в админке то же самое возвращает массив: array(4) {
  • => string(1) "3" [1]=> string(1) "4" [2]=> string(2) "23" [3]=> string(2) "37" }


В модели (JModelForm) во фронте в getItem() формирую запрос и получаю данные:
$this->item = $this->_db->loadObject();
$this->item->cities = json_decode($this->item->cities, true);
var_dump($this->item->cities); => array(4) {
  • => string(1) "3" [1]=> string(1) "4" [2]=> string(2) "23" [3]=> string(2) "37" }


Может, во фронте  как-то дополнительно надо передавать данные в форму?
getForm() присутствует и отрабатывает нормально - поле-то отображается, или я что-то опять не знаю/упустил?
« Последнее редактирование: 13.01.2015, 12:08:40 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Код конечно оригинальный ) Зачем вам сетеры и гетеры непонятно если у вас масло масляное ?)
И я вам же показал как сделать все красиво, а вы я так понял вернулись обратно к своему варианту?
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Зачем вам сетеры и гетеры
а как мне еще получить из XML значения собственных атрибутов?
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Сократил так:
Спойлер
[свернуть]

Все равно там же: в админке работает, во фронте - нет.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Объясняю!
Ваш код:
Код: php
public function __get($name)
  {
    switch ($name) {
      case 'rows':
        return $this->$name;
      case 'src':
        return $this->$name;
    }
    return parent::__get($name);
  }
Это масло масляное! ВЫ проверяете или $name равно rows и возвращаете $this->rows!
Это все равно что написать
Код: php
public function __get($name){
        return $this->$name;
}
И все равно что написать:
$a  = 2;
if(2 == 2) echo $a;

Я уже молчу о том что сетеры и геттеры не срабатывают с публичными полями )
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
это я уже убрал, см. мой пред. пост
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Как поле подключаете во фронте?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Опциональное поле в форме

Автор borro

Ответов: 21
Просмотров: 1873
Последний ответ 28.12.2020, 12:16:13
от platonische
Как написать сложное кастомное поле?

Автор Gover

Ответов: 1
Просмотров: 784
Последний ответ 11.07.2018, 00:14:34
от fsv
Если нужно добавить поле в subform repeatable своим ява скриптом - как сделать?

Автор Progreccor

Ответов: 7
Просмотров: 1015
Последний ответ 03.04.2018, 16:03:54
от Progreccor
Поле для прикрепления файлов в администраторе

Автор Joker_V

Ответов: 1
Просмотров: 1125
Последний ответ 09.04.2016, 21:17:02
от Joker_V
Добавляю поле Featured в компоненте

Автор platonische

Ответов: 6
Просмотров: 1304
Последний ответ 21.10.2015, 18:06:48
от Aleks.Denezh