Новости Joomla

Перевод и публикация интервью с Joomla евангелистом на греческом портале Joomla

Перевод и публикация интервью на греческом портале Joomla 🇬🇷

Утро, просматриваешь входящие письма и изучаешь новости и внезапно обнаруживаешь, что инициатива, которую ты начал, подхватывается другими людьми. 🎉

Недавно я взял интервью у Билла (Василиса) Коциаса - руководителя студии, читающего лекции в университете и популяризатора Joomla в Греции. Это интервью из журнала NorrNext, в оригинале на английском, теперь доступно на греческом языке и опубликовано на портале joomla.gr. 🎉

До чего же приятно… 😇😊 Работа замечена и с ней посчитали необходимым ознакомить аудиторию страны, в которой Билл читает лекции. И это солнечная Греция - страна, страна, с которой Россию многое связывает. 🇬🇷🇷🇺🕊

Смотрю на греческий алфавит и тут же рисуются картины белоснежных зданий в окружении винограда и амфор, красивых женщин в сандалиях и мужественных воинов, охраняющих покой полисов, в которых ученые мужи работают над трудами, позже вошедшими в века. Красиво! 😇Но вернемся к интервью.

Из него вы узнаете, что в Греции доля Joomla среди CMS занимает порядка 30-40%. По моему мнению это - самый высокий показатель во всем мире. Также чтение лекций о Joomla в университетах позволит привести новых пользователей и к тому же молодое поколение. Ну и огромное кол-во сертификтатов Билла на стене (смотрим фото в статье) свидетельствует о том, что Joomla может применяться как профессиональный инструмент.

🌐 Оригинальное интервью (на английском)
🇬🇷 Интервью на греческом портале (joomla.gr)

Что насчет перевода на русский? Увы, времени всего 24 часа в сутках. Я продолжаю готовить новые интервью. Возможно, после завершения выпуска журнала, рассмотрю перевод некоторых интервью на русский. Но я об этом не говорил. 😊 В блоге @eugenius_blog публикую анонсы интересных событий из мира Joomla, интервью, уроки и полезные советы, а также делюсь мыслями:, связанными с разработкой и веб-дизайном.

Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5

👩‍💻 Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5.В Joomla для выполнения внешних запросов из PHP к сторонним API используется класс Joomla\Http\Http напрямую или же Joomla\Http\HttpFactory, который возвращает для работы преднастроенный по умолчанию класс Http. О работе с HTTP-запросами подробно рассказывалось в статье 2021 года Создание внешних запросов с использованием HttpFactory (Joomla). Некоторые изменения касаются работы с ответами на запросы. Например, наш запрос:
use Joomla\Http\HttpFactory;$http = (new HttpFactory)->getHttp($options, ['curl', 'stream']);$response = $http->get('https://any-url.ru/api/any/endpoint');
Раньше можно было получить код ответа или тело ответа как свойство $response - $response->code или $response->body. Однако, Joomla, начиная с Joomla 4 во многом переходит на стандарты PSR. В частности для работы с HTTP-ответами - на PSR-7. Также хорошая статья на Хабре о PSR-7: PSR-7 в примерах.
Прямое обращение к свойствам code, headers, body объявлено устаревшим в Joomla 6.0.0 и обещают удалить в Joomla 7.0.0.
Вместо этого нужно работать с HTTP-ответом по стандартам PSR-7. Код ответа.Было $response->code. Стало $response->getStatusCode().Заголовки ответа.Было $response->headers. Стало $response->getHeaders().Тело ответа.Было $response->body. Стало (string)$response->getContents().В тело ответа теперь приходит не строка, а поток - объект класса Laminas\Diactoros\Stream. Поэтому его нужно привести к строке (если это json, к примеру): (string)$response->getContents(). Чаще всего в коде Joomla встречается именно такой вариант. Однако, есть и вариант с перемещением указателя чтения на начало потока:
// Получили ответ в виде потока$stream = $response->getBody();// "перемотали" на начало$stream->rewind();// Получили строковый ответ$json = $stream->getContents();
В итоге результат одинаковый.@joomlafeed#joomla #разработка #php

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

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
Пример создания выпадающего списка (<SELECT>) с использованием класса JHTML

Данные для списка будем брать из базы данных.


     
// Получаем объект базы данных
     
$database =& JFactory::getDBO();
     
// Формируем запрос
     
$query "SELECT c.id AS value, c.title AS text FROM #__categories AS c WHERE c.section='com_qcontacts_details'";
     
// Выполняем запрос
     
$database->setQuery($query);
     
// Получаем массив объектов
     
$categorylist $database->loadObjectList();
     
// Создаём первый элемент выпадающего списка (<option value="0">Выберите категорию</option>)
     
$categories[] = JHTML::_('select.option',  '0'"Выберите категорию"'value''text' );
     
// Добавляем массив данных из базы данных
     
$categories array_merge$categories$categorylist);
     
// Получаем выпадающий список
     
$list JHTML::_(
                         
'select.genericlist' /* тип элемента формы */,
                         
$categories /* массив, каждый элемент которого содержит value и текст */
                         
'cid' /* id и name select`a формы */,
                         
'class="inputbox" size="1"' /* другие атрибуты элемента select */
                         
'value' /* название поля в массиве объектов содержащего ключ */,
                         
'text' /* название поля в массиве объектов содержащего значение */,
                         
/* value элемента, который должен быть выбран (selected) по умолчанию */
                      
);
« Последнее редактирование: 31.07.2009, 06:49:46 от Виталик »
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Виталик - замечательно, а сможешь описать создания не только SELECt, но и RADIO, multiply select и прочих опций форм с комментариями к каждой строке\переменной\массиву - цены не будет мануалу!
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
последний параметр списка не расписан.
значение по-молчанию, не 0, а NULL(!) ибо этот параметр может быть как числом/текстом, так и массивом совпадающих значений value
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
значение по-молчанию, не 0, а NULL(!) ибо этот параметр может быть как числом/текстом, так и массивом совпадающих значений value
Леш, это просто не очень однозначно написано, там имело в виду не то, что это значение по умолчанию у метода, а то, что это то значение, которое по умолчанию будет выбрано в списке.

p.s. Виталик, вообще респект, плюс я тебе вчера уже выдал. Если сделаешь для остальных элементов, как предложил Петр, я готов выдать еще дополнительные плюсы за каждый элемент :)
*

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
« Последнее редактирование: 20.05.2009, 23:21:27 от smart »
*

vmir

  • Осваиваюсь на форуме
  • 17
  • 4 / 0
На сколько мне известно в Joomla есть всякие примочечки в плане расширений класса JHTML. Но вот чего там точно нет, так это CheckBoxа. И раз уж пошла такая маза предлагаю сообществу заценить мою разработку  ^-^

       
Код
function getCheckBox($arr, $name, $attribs = '', $key = 'value', $value = 'text', $selected = null, $separator = ',')
{
if(is_null($arr)) return '';

reset( $arr );
$html = '<div style="padding: 10px 0 10px 0;">';

$id = $name;
$name .= "[]";

$useSel = (!is_null($selected));
if($useSel)
{
if(is_array($selected)) $useSel = count($selected);
else
{
$selected = trim($selected);
$useSel = strlen($selected);
if($useSel)
{
if(strpos($separator, $separator) !== false) $selected = explode($separator, $selected);
else $selected = array($selected);
}
}
}

for ($i=0, $n=count($arr); $i < $n; $i++ )
{
$k = $arr[$i]->$key;
$v = $arr[$i]->$value;
$_id = $id.$i;
$checked = ($useSel && in_array($k, $selected)) ? 'checked' : '';
$html .= '<span '.$attribs.'>';
$html .= '<input type="checkbox" '.$attribs.' name="'.$name.'" id="'.$_id.'" value="'.$k.'" '.$checked.' />'.$v;
$html .= '</span>';
}
return $html.'</div>';
}

Эту функицю я использую в классе helper своего компонента и вызываю ее при необходимости для разных видов.
Краткое описание параметров:
1) $arr - массив объектов с данными на основе которых строится чекбокс (получается как правило при запросе к БД с помощью метода $db->loadObjectList())
2) $name - имя чекбокса в html-коде <input type="checkbox" name="'.$name.'">
3) $attribs - атрибуты элемента <input type="checkbox">
4) $key - название ключа для объекта из массива $arr
5) $value - название значения для объекта из массива $arr
6) $selected - это либо массив, либо строка значений (которые разделены с помощью $separator), или одно значение, которые(ое) в чекбоксе будет отмеченно галкой при отображении элемента на сранице
7) $separator - это разделитель для строки $selected в случае, когда она содержит множество значений
*

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
$selected я бы передавал как string или как array

и проверял бы на is_array и не вводил бы лишний гемор в виде сепаратора
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
интересно по выпадающему списку - как передать одному из option параметр disable при генерации массива вручную либо же из базы?
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
пример:
Код: php
$a = 'abcde';
$arr = array(
JHTML::_('select.option',  '0', JText::_( $a[0] ) ),
JHTML::_('select.option',  '1', JText::_( $a[1] ) ),
JHTML::_('select.option',  '2', JText::_( $a[2] ), 'value', 'text', true ), // <-- set true to disable
JHTML::_('select.option',  '3', JText::_( $a[3] ) ),
JHTML::_('select.option',  '4', JText::_( $a[4] ) )
);
$name = 'checklist';
$attribs = '';
$selected = 3;
$id = 'checklistid';
echo JHTML::_('select.genericlist',  $arr, $name, $attribs, 'value', 'text', (int) $selected, $id );
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Дополнение данной темы для движка 1.0.хх
Встроенной работы с параметром disabled нет. Потому открываем includes/joomla.php, находим функцию function selectList
и после
Код: php
} else {
$extra .= ($k == $selected ? " selected=\"selected\"" : '');
}
дописываем
Код: php
//Add disabled params
$extra2 = '';
$extra2 .= $id ? " id=\"" . $arr[$i]->id . "\"" : '';
if (is_array( $disabled )) {
foreach ($disabled as $obj2) {
$k3 = $obj2->$key;
if ($k == $k3) {
$extra2 .= " disabled=\"disabled\"";
break;
}
}
} else {
$extra2 .= ($k == $disabled ? " disabled=\"disabled\"" : '');
}
//
Далее вместо
Код: php
$html .= "\n\t<option value=\"".$k."\"$extra>" . $t . "</option>";
Пишем
Код: php
$html .= "\n\t<option value=\"".$k."\"$extra.$extra2>" . $t . "</option>";
Далее в нашем скрипте для элемента массива дописываем параметр
Код: php
$arr1[] = mosHTML::makeOption( '2', '22222', disabled );
и добавляем параметр $disabled в mosHTML::selectList
« Последнее редактирование: 20.06.2009, 18:09:24 от beliyadm »
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Валидация форм средствами Joomla

Автор VETERINAR

Ответов: 29
Просмотров: 48810
Последний ответ 09.10.2013, 15:14:44
от digitalheart
Как написать системный плагин для Joomla 1.5

Автор Sergey2

Ответов: 2
Просмотров: 38694
Последний ответ 23.06.2013, 15:28:38
от l-key
[how to] Красота JHTML, или создание элементов формы с

Автор Professor

Ответов: 11
Просмотров: 24270
Последний ответ 27.12.2012, 18:14:38
от BaR
Плагин рейтинга чего угодно для Joomla 1.5

Автор Obmor

Ответов: 54
Просмотров: 31395
Последний ответ 18.12.2012, 15:01:55
от Raimonds
Как вы "въехали" в создание расширений?

Автор aanvale

Ответов: 4
Просмотров: 2677
Последний ответ 13.10.2012, 21:44:25
от passer