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 необходимо зайти в административную панель управления сайтом и выполнить следующие действия:

  1. Выбрать пункт меню «Сайт - Обслуживание - Очистить весь кэш» и удалить весь кэш
  2. Выбрать пункт меню «Сайт - Общие настройки» и отключить кэширование
  3. Выбрать пункт меню «Компоненты - Обновления Joomla!»
  4. На панели кнопок нажать кнопку «Очистить кэш»
  5. Когда обнаружено обновление Joomla!, нажать кнопку «Установить обновление»
  6. После обновления необходимо очистить кэш браузера, так как JavaScript и CSS файлы могут быть закэшированы браузером

Обновление в ручную.

  1. Cкачайте пакет обновления (Joomla_3.7.0-Stable-Update_Package.zip).
  2. Пройдите «Компоненты - Обновление Joomla».
  3. Нажмите кнопку «Выберите файл» и выберите файл скаченного пакета.
  4. Нажмите кнопку «Загрузить и установить»

Моя первая попытка обновить сайт до 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

Повторюсь, все изменения на вкус не пробовал, поэтому весь букет не передам. Сначала приведу список новинок от разработчиков, а потом скажу, до чего добрался я. Официально внесены следующие изменения:

  1. Добавлены пользовательские поля Fields,
  2. Обновился менеджер меню,
  3. Появилась возможность многоязычной ассоциации компонентов,
  4. Обновлён редактор TinyMCE,
  5. Изменено обслуживание движка администратором.

Новый редактор TinyMSE

Пользовательские поля по идее дело неплохое, но вникать в корректность их вывода не стал – сделаю это после выхода версии Stabile. Менеджера меню и многоязычную ассоциацию компонентов я не оценил, а вот новый редактор поюзал минут 10. В нём появились новые пункты для вставки в страницу пунктов меню и контактов. В настройках компонента предлагается три варианта редактора:

  1. Минимальный,
  2. Расширенный,
  3. Максимальный.

В первом всего пара кнопок для редактирования страницы, во втором чуть больше, но экстаза нет, а вот максимальный TinyMCE имеет дополнительные возможности. Редактор мне понравился, но он и стал причиной отката до старой версии 3.6.5. Причина? Пробный материал не хотел сохраняться, и отменить создание было нельзя.

Кнопки отказа и сохранения красиво смотрелись в админке, но не работали. Проблема именно в редакторе, ибо без него всё работает. Допилят. Пока же ставлю 5 возможности добавлять на страницу при редактировании пункты меню и контакты.

В версии 3.7 слегка изменился и интерфейс админки, поля меток и категорий при создании материала стали меньше, подкорректирован и шрифт.

Вывод

Глобальных изменений в виде нового роутера так и нет (этот роутер уже обещают 99 лет, но воз и ныне между Воркутой и Норильском), про пользовательские поля говорят много хорошего, но их надо тестировать, а в редакторе появились полезные обновления, но сам TinyMCE требует пилы и стамески.

Обновляться на стабильную версию 3.7 надо, так как в ней, кроме этих изменений, поставлены заплатки на некоторые дырки безопасности, но проверка тестовой версии не позволила мне наполнить мир красотой и гармонией. От Joomla 3.7 пока (19 апреля 2017) я оставил версию схемы базы данных 3.7.0-2017-04-10, остальное ждёт конца апреля или мая когда стабильность работы появится на деле.

А обновлённый редактор ничего так, вставлять без геморроя в материал пункты меню и контакты дело хорошее.



Просмотров