Joomla 3.7 после обновления. Обновление руссификации Joomla. Russian language. Меню в админке
Доброго времени суток всем! В данном посте хочу рассмотреть некоторую особенность, которая появилась в Joomla, начиная с версии 3.7 — это дополнительные поля в материалах. Считаю это полезным дополнением к стандартному компоненту материалов com_content. Ранее приходилось из-за нескольких полей устанавливать тяжеловесные конструкторы контента (CCK) и все для того, чтобы пользователю было легче работать в админке. В данной статье как раз рассмотрим как создать дополнительные поля в материалах и как вывести их во внешнем сайте.
Также, как и материалы поля объединяются в группы, это своего рода категории. Для того,чтобы создать группу полей идем в админке Материалы -> Группы полей . Создаем группу. Далее, создаем сами поля. Здесь уже по более опций, пройдемся по основным.
Структура статьи
Вкладка «Основное»
Заголовок — сюда вводим заголовок поля, вписываем такой, чтобы вам было удобно ориентироваться по созданным полям в админке, а их может быть много.
Тип — выбираем тип поля: Текст (text), Текстовое поле (textarea), Url, Календарь и т.д. Не буду здесь разбирать в подробностях, т.к. ничего сложного в них нет и настраиваются все по одному принципу.
Имя — вводим алиас поля латиницей. Это своего рода индефикатор поля и он должен быть уникальным.
Название — сюда вводим то название поля, которое мы хотим видеть на сайте. Вообще по умолчанию, когда заполняете заголовок данное поле заполняется автоматически, но вы можете его переопределить.
Описание — вводим описание поля.
Обязательно — если данное поле будет обязательным при создании материала, то ставим переключатель «Да».
Значение по умолчанию — можете ввести то значение, которое должно быть подставлено по умолчанию в данное поле.
Фильтр — здесь выбираем параметр фильтрации вводимых данных, например, вы хотите, чтобы данное поле принимало только целые числа. Данную фильтрацию можно определить и глобально в настройках плагина данного типа поля.
Максимальная длина — можете ограничить длину вводимых символов.
Вкладка «Параметры»
Placeholder — это подсказка для поля. Например, можете ввести подсказку для вашего контент менеджера.
CSS-класс для показа — можете ввести свой класс поля для переопределения стиля в css.
Заголовок поля — управляет выводом заголовка поля на сайте.
Автоматическое отображение — вот эта полезная опция на мой взгляд. Есть предустановленные настройки (на момент написания статьи значения не переведены на русский язык):
- After Title — показать поле после заголовка;
- Before Display — показать перед текстом;
- After Display — показать после текста;
- Do not automatically display — не показывать автоматически поле. Данная опция предусматривает вывод поля в шаблоне сайта посредством кода. Об этом поговорим ниже.
Все, сохраняем поле и идем создавать материалы. В материалах той категории что вы присвоили полям появится новая вкладка с именем группы полей. У меня она называется «Поля «.
А вот как данное поле выглядит на сайте.
Название поля я сделал жирным через стили CSS. Сразу скажу, что через автоматический вывод у нас нет возможности кастомизировать шаблон вывода полей. Это возможно сделать без автоматического вывода.
Вывод дополнительных полей материалов в шаблоне Joomla — ручной режим
Итак, если вам не подходит предустановленные настройки вывода полей или вы хотите просто править html-шаблон полей, то есть возможность вывести поля в любом месте шаблона материала и обрамить их какими угодно тегами. Для вывода поля в ручном режиме необходимо сначала отключить автоматический показ поля в параметрах. Если этого не сделать, то поля у вас будут просто дублироваться.
После этих действий в папке вашего шаблона должна появиться следующая директория с файлом Ваш шаблон -> html -> com_content -> article — default.php . Вот с данным файлом и будем работать. Открываем файл шаблона материала и в нужном месте вставляем код для вывода поля. Я вставил до кода вывода текста:
item->text; ?>
Код вывода поля
item->jcfields as $field) { $myCustomFields[$field->name] = $field->value; } // RECOVER CUSTOM FILED NAME if (isset($myCustomFields["field-1"]) and !empty($myCustomFields["field-1"])) : ?>
Вместо field-1 подставляете ваш псевдоним поля (первый скриншот настроек, поле «Имя»). Вот как это выглядит на примере — .
Если вы хотите вывести более одного поля, то нет необходимости заново копировать цикл «foreach». Данный цикл необходимо объявить выше вывода полей. А второе поле вывести, например, так:
Вместо field-2 — название вашего поля.
На этом завершу. Всем удачи, всем пока!
Доступна к загрузке Joomla! 3.7.0. Это больше обновление Joomla, которое добавляет огромное количество новых функций.
В обновлении Joomla 3.7.0 было сделано 1300 изменений и добавлено более 40 новых возможностей. Самым значительным изменением Joomla 3.7 это добавление кастомных полей в ядро системы.
Просим обратить внимание, что это очень большое обновление системы и возможны критические ошибки, так как в процессе подготовки к релизу были затронуты почти все системные функции Joomla. Рекомендуем дождаться выхода Joomla 3.7.1, который должен исправить возможные проблемы Joomla 3.7.
Что можно отметить в релизе Joomla 3.7.0?
- Кастомных поля - 15 типов полей для ваших статей, пользователей и контактов.
- Компонент ассоциаций многоязычности - по идее упросит ведение и создание сайтов на нескольких языках.
- Менеджер меню админ панели.
- Доработка базового редактора Joomla - TinyMCE - больше кнопок и больше возможностей. Можно будет добавлять ссылки на статьи, контакты.
- Блокировка удаления компонентов - теперь можно будет заблокировать удаление некоторых компонентов Joomla, что позволит избежать некоторых проблем с обслуживанием сайта.
- Создание материала и пункта меню в один шаг.
- Общая авторизация - админ панели и фронта сайта.
- Новый календарик даты.
- Расширен вывод параметров при редактировании статьи.
Подробнее о возможностях Joomla 3.7 вы можете прочитать в наших статьях:
Что не вошло в Joomla 3.7.0?
- Как не смешно новый роутер - это самое многострадальное нововведение, которое в очередной раз исключили из релиза, так как в процессе тестирования выявились проблемы. Добавление этой возможности перенесли в Joomla 3.8.
- Медиа-менеджер - над ним работа ведется и скорей всего он появится в Joomla 3.8 или 3.9 (последний релиз ветки 3.х).
Дистрибутив Joomla! 3.7.0
Обновление Joomla! 3.x до версии Joomla! 3.7.0
Перед обновлением до новой версии необходимо в первую очередь создать резервную копию базы данных и файлов, это поможет вам сэкономить время и нервы если вдруг возникнут проблемы в процессе обновления.
Для автоматического обновления Joomla! 3.x до версии Joomla 3.7 необходимо зайти в административную панель управления сайтом и выполнить следующие действия:
- Выбрать пункт меню «Сайт - Обслуживание - Очистить весь кэш» и удалить весь кэш
- Выбрать пункт меню «Сайт - Общие настройки» и отключить кэширование
- Выбрать пункт меню «Компоненты - Обновления Joomla!»
- На панели кнопок нажать кнопку «Очистить кэш»
- Когда обнаружено обновление Joomla!, нажать кнопку «Установить обновление»
- После обновления необходимо очистить кэш браузера, так как JavaScript и CSS файлы могут быть закэшированы браузером
Обновление в ручную.
- Cкачайте пакет обновления (Joomla_3.7.0-Stable-Update_Package.zip).
- Пройдите «Компоненты - Обновление Joomla».
- Нажмите кнопку «Выберите файл» и выберите файл скаченного пакета.
- Нажмите кнопку «Загрузить и установить»
Моя первая попытка обновить сайт до Joomla 3.7, привела к ошибке PLG_QUICKICON_PHPVERSIONCHECK. Почему это получилось и как без ошибок обновиться до Joomla 3.7 в этой статье.
Напомню. Вы увидите сообщение о необходимости обновления системы, если у вас включен плагин «Панель иконок - Уведомление о новых версиях Joomla!», ID=437.
Об ошибке PLG_QUICKICON_PHPVERSIONCHECK
С одной стороны, всё просто. Эта ошибка обозначает, что я на сервере хостинга использую не поддерживаемую версию PHP.
С другой стороны, не всё понятно. У меня на сервере стоит PHP 5.4.26. До обновления это версия PHP «всех» устраивала, а для Joomla 3.7, получается, нужна более новая версия PHP?
Чтобы понять проблему, идем на страницу «Технические требования для установки Joomla» (https://downloads.joomla.org/ru/technical-requirements-ru ).
Данная страница обновлена 20 марта 2017. Информация на странице не поменялась, для работы Joomla, в том числе Joomla 3.7, требуется минимальная версия PHP 5.3, и рекомендованы PHP 5.6 или PHP 7.
По всей видимости, причина ошибки PLG_QUICKICON_PHPVERSIONCHECK в недостаточной версии PHP. Остается поменять версию PHP 5.4.26. на сервере и после восстановления сайта из резервной копии, обновиться заново.
Обновление по FTP
Для эксперимента, обновлюсь без смены версии PHP по FTP. Для этого:
- Скачиваю тут (https://downloads.joomla.org/ru/cms/joomla3/3-7-0 ) файл Joomla! 3.7.0 Upgrade Package (.zip);
- Распаковываю скачанный архив;
- Проверяю права CHMOD для файла configuration.php системы, они должны быть, как минимум, 644;
- Закачиваю архив обновления поверх старого, по FTP в режиме «Заменить более новым».
- Смотрю результат, как и ожидалось, обновление не удалось.
Выводы
Примечание: На другом сервере обновления прошли без осложнений, в автоматическом режиме. Напомню, как это сделать:
Автоматическое обновление Joomla
- Очистите кэш сайта;
- Сделайте резервную копию сайта;
- Если используете не проверенные расширения малоизвестных авторов, отключите их на вкладке Расширения>>>Управление;
- Перейдите на вкладку обновления (Компоненты>>>Обновление Joomla!);
- Обновите систему в режиме автоматического обновления с записью «Напрямую»;
- Удачное обновление система проинформирует зеленой полосой;
Проверяя версии расширений, включайте их по одному. Это полезно, если какое-либо расширение, будет конфликтовать с новой версией системы.
Еще одна ошибка
После обновления выскочила "традиционная ошибка" : Fatal error: Call to a member function getTag() on a non-object in /libraries/cms/application/site.php on line 456 . Выражается эта ошибка белым экраном после написания новой статьи или редактиовании старой. Появляется не везде, исправляется так.
Баги в популярных CMS в последние месяцы стали настоящей напастью. Появление каждой такой уязвимости означает, что под угрозой оказываются сотни тысяч сайтов, и далеко не каждый владелец успевает вовремя обновиться до свежей версии. В этой статье мы изучим недавно обнаруженную дыру в CMS Joomla: из-за недостаточной фильтрации пользовательских данных система уязвима для SQL-инъекций.
Joomla 3.7.0, помимо множества улучшений и исправлений, принесла в ядро функцию пользовательских полей и, в частности, компонент com_fields . Как ты уже, наверное, догадался, этот новый компонент и стал причиной проблемы. Так что без лишних церемоний приступим к увлекательному путешествию в исходниках по следам уязвимости.
Детали уязвимости
В первую очередь заглядываем в сам файл контроллера.
16: class FieldsController extends JControllerLegacy 17: { ... 27: public function __construct($config = array()) 28: { ... 32: if ($this->input->get("view") === "fields" && $this->input->get("layout") === "modal") ... 36: $lang->load("com_fields", JPATH_ADMINISTRATOR); 37: 38: $config["base_path"] = JPATH_COMPONENT_ADMINISTRATOR;
Сразу же бросается в глаза условие : если view и layout принимают значения fields и modal соответственно, то CMS загружает администраторскую версию компонента com_fields . И все запросы от обычного пользователя будут проксироваться в него.
Что же нам это дает? Давай посмотрим.
Заглянем внутрь метода getListQuery , он занимается тем, что собирает запрос к базе данных. Нас интересует часть со строкой, в которой формируется сортировка (ORDER BY).
124: protected function getListQuery() 125: { ... 304: // Add the list ordering clause 305: $listOrdering = $this->getState("list.fullordering", "a.ordering"); 306: $orderDirn = ""; 307: 308: if (empty($listOrdering)) 309: { 310: $listOrdering = $this->state->get("list.ordering", "a.ordering"); 311: $orderDirn = $this->state->get("list.direction", "DESC"); 312: } 313: 314: $query->order($db->escape($listOrdering) . " " . $db->escape($orderDirn));
Переменная $listOrdering - название поля в таблице, по которому требуется отсортировать запрос. Ее фильтрует функция escape , которая зависит от используемого на сервере драйвера для работы с БД. Она возвращает строку, в которой экранированы спецсимволы, в частности кавычки.
Рассмотрим исходный код этой функции для драйвера mysqli . Он встречается чаще всего, поскольку Joomla при установке предлагает именно его.
/libraries/joomla/database/driver/mysqli.php
242: public function escape($text, $extra = false) 243: { 244: $this->connect(); 245: 246: $result = mysqli_real_escape_string($this->getConnection(), $text); 247: 248: if ($extra) 249: { 250: $result = addcslashes($result, "%_"); 251: } 252: 253: return $result; 254: }
Для фильтрации используется функция mysqli_real_escape_string (строка 246), которая экранирует null-байты, переносы строк, одинарные и двойные кавычки. Однако в нашем случае это абсолютно бесполезные действия, так как в нашей переменной хранится название колонки для сортировки.
Давай посмотрим, как передать нужные нам значения в $listOrdering . Метод getState наследуется прямиком из абстрактного класса JModelLegacy , который является родителем для JModelList , а он, в свою очередь, наследуется нашим FieldsModelFields .
019: class FieldsModelFields extends JModelList ... 305: $listOrdering = $this->getState("list.fullordering", "a.ordering");
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!
Официальный выход Joomla 3.7 намечен на 25 апреля 2017 года от Рождества Христова, но руки имеют свойство чесаться, поэтому я протестировал один сайт на новом движке. Тестовая сборка доступна раньше, поэтому я решил взглянуть на отличия Joomla в реальном варианте.
Что скажу после получаса теста и отката? Пилите, Шура, пилите – они золотые. Изменения есть, все руками не трогал, но кое-что потестил и пришёл к выводу, что буду ждать версии Stabile.
Что изменилось в 3.7
Повторюсь, все изменения на вкус не пробовал, поэтому весь букет не передам. Сначала приведу список новинок от разработчиков, а потом скажу, до чего добрался я. Официально внесены следующие изменения:
- Добавлены пользовательские поля Fields,
- Обновился менеджер меню,
- Появилась возможность многоязычной ассоциации компонентов,
- Обновлён редактор TinyMCE,
- Изменено обслуживание движка администратором.
Новый редактор TinyMSE
Пользовательские поля по идее дело неплохое, но вникать в корректность их вывода не стал – сделаю это после выхода версии Stabile. Менеджера меню и многоязычную ассоциацию компонентов я не оценил, а вот новый редактор поюзал минут 10. В нём появились новые пункты для вставки в страницу пунктов меню и контактов. В настройках компонента предлагается три варианта редактора:
- Минимальный,
- Расширенный,
- Максимальный.
В первом всего пара кнопок для редактирования страницы, во втором чуть больше, но экстаза нет, а вот максимальный TinyMCE имеет дополнительные возможности. Редактор мне понравился, но он и стал причиной отката до старой версии 3.6.5. Причина? Пробный материал не хотел сохраняться, и отменить создание было нельзя.
Кнопки отказа и сохранения красиво смотрелись в админке, но не работали. Проблема именно в редакторе, ибо без него всё работает. Допилят. Пока же ставлю 5 возможности добавлять на страницу при редактировании пункты меню и контакты.
В версии 3.7 слегка изменился и интерфейс админки, поля меток и категорий при создании материала стали меньше, подкорректирован и шрифт.
Вывод
Глобальных изменений в виде нового роутера так и нет (этот роутер уже обещают 99 лет, но воз и ныне между Воркутой и Норильском), про пользовательские поля говорят много хорошего, но их надо тестировать, а в редакторе появились полезные обновления, но сам TinyMCE требует пилы и стамески.
Обновляться на стабильную версию 3.7 надо, так как в ней, кроме этих изменений, поставлены заплатки на некоторые дырки безопасности, но проверка тестовой версии не позволила мне наполнить мир красотой и гармонией. От Joomla 3.7 пока (19 апреля 2017) я оставил версию схемы базы данных 3.7.0-2017-04-10, остальное ждёт конца апреля или мая когда стабильность работы появится на деле.
А обновлённый редактор ничего так, вставлять без геморроя в материал пункты меню и контакты дело хорошее.