Сайт компьютерных навыков

Joomla 3.7 4 что нового. Обновление руссификации Joomla. Russian language. Гибкая настройка визуального редактора TinyMCE

25 апреля 2017 года состоялся релиз Joomla 3.7. В новой версии Joomla появились значимые улучшения, которые порадуют и веб-мастеров и администраторов. В этой статье я привожу обзор новых функций Joomla 3.7 с примерами.

Обзор основных функций Joomla 3.7

Всего в новой версии Joomla было сделано около 700 улучшений. Мы рассмотрим только наиболее важные из них, которыми могут пользоваться как разработчики, так и простые администраторы сайтов.

Настраиваемые поля (Joomla Custom Fields)

Главное нововведение Joomla 3.7 – это, конечно, настраиваемые поля. Честно говоря, я ждал их еще с Joomla 1.5, но появились они в стандартном пакете только сейчас.

Настраиваемые поля – это уникальные поля, которые вы сами можете добавить к материалам Joomla, пользователям Joomla и контактам. Далее, вы заполняете их при создании материалов, либо, если это поля пользователей, они заполняют их при регистрации, и затем видите данные из этих полей на сайте.

Примеров использования настраиваемые полей масса: дополнительные изображения, подписи, даты к материалам, сложные профили пользователей и др.

Всего заявлено 15 различных типов дополнительных полей:

  • Календарь
  • Чекбокс
  • Выбор цвета
  • Редактор
  • Целое число
  • Список
  • Список изображений
  • Медиа
  • Радио-кнопки
  • SQL-запрос
  • Текст
  • Область текста (textarea)
  • Пользователь
  • Группа пользователей

Все эти типы вы теперь можете в неограниченном количестве применять к материалам Joomla.

Приятным моментом является также то, что каждое из полей можно привязать к одной или нескольким отдельным категориям Joomla, создавая, таким образом, разные форматы материалов. Это, конечно, еще не полноценные типы контента, как в SEBLOD , но уже большой шаг в эту сторону. Также, с помощью разбиения на группы, дополнительные поля можно разделять по разным вкладкам для удобства заполнения.

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

И главное – дополнительные поля основаны на плагинах. Это означает, что появится еще масса новых типов дополнительных полей от сторонних разработчиков. Да вы и сами сможете создать новый тип поля, если, конечно, имеете достаточно опыта в программировании. И никаких хаков!

Менеджер многоязычности

В Joomla 3.7 добавлен дополнительный компонент, который делает управление многоязычным сайтом проще. Вы теперь можете видеть в одном окне сразу два редактора для двух языков и переводить контент удобно:

Улучшенная работа с админкой

Теперь вы можете создавать статьи, категории и контакты «на лету», при создании пункта меню. Если вы создаете пункт меню и выбрали в нем, например, тип пункта «Отдельная статья», то при выборе статьи есть возможность создать ее здесь же, во всплывающем окне:

(увеличьте для просмотра в движении)

На мой взгляд, польза от этого нововведения весьма сомнительная, но, тем не менее, оно имеет место быть.

Менеджер меню админки

Если с созданием меню на фронтенде у Joomla было все хорошо, то создавать меню в админке, до сего дня, было очень сложно. В Joomla 3.7 эту ситуацию исправили – появился полноценный менеджер, который позволяет создавать меню для админки. Это может быть очень удобно, когда вы много работаете с Joomla как администратор или контент-менеджер. Вы можете вынести важные для вас пункты на главную страницу так, чтобы они всегда были перед глазами.

Улучшения редактора TinyMCE

В стандартном редакторе Joomla TinyMCE появилось несколько дополнительных, очень удобных кнопок: вставка ссылок на пункты меню, контакты, статьи:

Кроме того, в настройках плагина TinyMCE появилась возможность гибко настроить редактор под себя:

Установка Page Title в настройках материала.

Эта функция не заявлена, как основная, но она может многим быть очень полезна. Раньше в Joomla нельзя было задать Title в строке браузера для материала, который отличался бы от названия материала. Точнее сделать это было можно, но только используя для такого материала отдельный пункт меню, что далеко не всегда уместно. Сейчас в настройках материала вы можете видеть отдельное поле для ввода Title:

Общая авторизация

Раньше всегда приходилось авторизовываться на сайте и в админке раздельно. Авторизация на сайте не давала доступа к админке и наоборот. В Joomla 3.7 вы можете активировать Общую авторизацию (Общие настройки -> Вкладка «Система» -> Shared Sessions). По умолчанию эта опция отключена. После активации авторизация пользователя будет происходить одновременно и на сайте и в админке. Естественно, если у пользователя не хватает прав для доступа в админку, он там авторизован не будет.

Удобное управление расширениями

Разработчики Joomla дали возможность разработчикам расширений запрещать, при желании, удаление отдельных частей расширения. Таким образом, разработчик может защитить расширение от случайного удаления какой-то его части, например, плагина. Такое расширение можно будет удалить только целиком.

Отображения рейтинга материала и количества голосов в админке

Это мелочь, но лично мне она очень нравится. Теперь в менеджере материалов, в админке, вы можете видеть пользовательский рейтинг по каждому материалу, количество проголосовавших, а также можете сортировать материалы по этим колонкам:

Все это работает только при условии, что плагин рейтинга активирован и используется на сайте.

Чего нет в Joomla 3.7?

Очень обидно, но в Joomla 3.7 не включили обновленный роутер. До последнего момента его включение планировалось, но в процессе тестирования в нем нашли некоторые недоработки, а потому перенесли его.

Новый роутер очень нужен Joomla. Тот, что есть сейчас, требует серьезной доработки для каждого сайта, который собирается продвигаться с помощью SEO.

Когда же, наконец, появится новый роутер? Очень высока вероятность, что в следующей версии Joomla 3.8, выпуск которой планируется на третий квартал 2017 года, т.е. довольно скоро.

Заключение

Так или иначе, релиз Joomla 3.7 – большой шаг вперед в развитии этой CMS. Несмотря на некоторые недостатки Joomla, она стабильно развивается и идет вперед, создание и продвижение сайтов становится проще, а управление ими удобнее.

Хочу напомнить, если у вас действующий сайт на Joomla 3.6.5, не спешите обновлять его до Joomla 3.7. Подождите выхода Joomla 3.7.1 или 3.7.2. В них новый функционал будет уже обкатан, а недоработки, которые не обнаружили в процессе тестирования Joomla 3.7.0, устранены. Если же вы начинаете делать новый сайт, то Joomla 3.7 – отличный выбор!

Вконтакте

Баги в популярных 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. Текущая версия Joomla! 3.7.0. После , потребовалось обновить и файл русской локализации Joomla. Про то, как понять, что вышла новая версия пакета с переводом Joomla на русский язык и про то, как установить пакет с обновлениями перевода Joomla на русский язык, будет показано ниже. До того, как устанавливать какие-либо обновления, рекомендуется создать резервную копию сайта. Но кто её делает? =)

Первым признаком того, что требуется накатить обновления является появление уведомления об этом при заходе в админку Joomla:

Тут ты и воспользоваться кнопкой «Обновить сейчас », но не всегда доходят руки. Поэтому есть ещё одно место на главной странице админки Joomla, где тоже есть маячок о необходимости обновить расширения. Это левое меню раздел «ОБСЛУЖИВАНИЕ », где тоже чётко указывается «». Это сообщение является ссылкой (как и кнопка «Обновить сейчас » на картинке выше) для начала установки обновлений:

В общем, рано или поздно становится на столько любопытно, что же там такое требует обновления, что перейдя по ссылке можно увидеть, что . Для того, чтобы его установить требуется пометить его в чекбоксе, а после этого нажать на кнопку «Обновить », расположенную в верхнем ряду кнопок управления «Менеджера расширений » раздела «Обновления »:

После нажатия заветной кнопки «Обновить » начнётся процесс обновления выбранного пакета. И после того, как он успешно установится, перезаписав старый пакет , то есть изменения необратимы , Joomla выдаст весёлое сообщение «»:

Как показывает практика, перевод никогда не бывает полным. Но, по крайней мере, основные записи и сообщения на страницах сайта будут на русском языке. А это всегда полезно, так как не отпугнёт пользователей, увидевших надписи на экзотическом (английском) языке непонятными латинскими буквами. =)

Итак у вас есть сайт на Joomla 3.4.х, который вам нужно обновить до последней версии (на момент написания статьи это версия 3.8.0).

Вроде бы всё должно быть проще некуда, качаем пакеты обновлений и постепенно накатываем один за другим, периодически исправляя базу данных средствами Joomla, но не всё так просто. Есть один подводный камушек (а то и десяток), но давайте по порядку, и так имеем сайт на Joomla 3.4.x и что дальше...

Обязательно делаем бекап файлов сайта и базы данных!
Так как всегда что-то может пойти не так как задумано)

ЭТАП 1. Обновляем Joomla 3.4.x до версии 3.4.5


ЭТАП 2. Обновляем Joomla 3.4.5 до Joomla 3.5.1

  1. Идем по ссылке и качаем патч Joomla! 3.5.1 Upgrade Package (.zip)
  2. Далее повторяем пункты 2-5 из ЭТАПЕ 1

ЭТАП 3. Обновляем Joomla 3.5.1 до Joomla 3.6.0
(самый обширный этап обновления)

  1. Идем по ссылке и качаем патч Joomla! 3.6.0 Upgrade Package (.zip)
  2. Далее нужно распаковать этот архив на вашем ПК и залить полученные файлы на ваш хостинг по фтп с заменой файлов.
  3. Переходим "Расширения->Менеджер расширений" и в левом меню выбираем "База данных" и опять видим что наша база данных устарела
  4. Жмем кнопку "Исправить".
  5. После того как вы обновили Joomla до версии 3.6.0 ОБЯЗАТЕЛЬНО нужно установить компонент обновления и другие обновления.

    Для этого идём "Расширения->Менеджер расширений->Обновления (Update)" и жмём кнопку "Найти обновления" , в результате получим список требуемых обновлений. Тут нам нужно выбрать обновления для:
    • Joomla! Update Component Update
    • Weblinks Extension Package
  6. Сначала обновляем Joomla! Update Component Update и только потом Weblinks Extension Package . Так же можете обновить Языковой пакет .
  7. Теперь перейдём "Расширения->Менеджер расширений->Установка (Install)" и увидим такую картину:

    причем если кликнуть по ссылке Plugin Manager вы скорее всего увидите пустой список плагинов. Давайте это исправим, для этого:
  8. Опять перейдём "Расширения->Менеджер расширений->Установка (Install)" и перейдем по ссылке "Plugin Manager" в сообщении об отсутствии плагинов установки и теперь тут мы увидим список требуемых плагинов.
  9. Ставим галочки напротив плагинов: "Installer - Install from ", "Folder Installer - Install from ", "Upload Installer - Install from URL " и жмем кнопку "Включить ".
    Теперь перейдя на "Расширения->Менеджер расширений->Установка (Install)" мы увидим уже привычные нам кладки с разными вариантами установки
  10. Делаем резервную копию файлов сайта и базы данных.

Итак, теперь у нас есть возможность установки патчей прямо из админки без необходимости заливать файлы по FTP.

ЭТАП 4. Обновляем Joomla 3.6.0 до Joomla 3.6.5


ЭТАП 5. Обновляем Joomla 3.6.5 до Joomla 3.7.5
(тоже не менее обширный этап обновления чем третий)


На этом этапе обновления Joomla уже начинает нас предупреждать о том что наша версия PHP 5.4-5.6 устарела и рекомендует перейти на более новую версию PHP7.

ЭТАП 4. Обновляем Joomla 3.7.5 до Joomla 3.8.0
(заключительный этап обновления)


ВНИМАНИЕ!

Переход на более свежую версию PHP7 не только
повысит устойчивость вашего сайта ко всякого рода взломам,
но и примерно в 2 и более раз повысит его быстродействие !

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

автор:

Сегодня обновил Joomla до версии 3.7 и обнаружил в ней очень полезную вещь, которую, очень долго ждал - пользовательские поля, привязанные к материалу. То есть, помимо стандартных полей "дата публикации", "автор", "категория" и т.д. наконец-то появилась возможность создать поля "цена", "жанр", "возрастня категория" и вообще все, что можно придмать.

Не долго думая, решил поэкспериментировать с одним из сайтов, который содержал небольшой каталог продукции с ценами. Цены были указаны непосредственно в теле статьи. Выглядело это примерно так:

Главное неудобство в том, что если захочется поменять оформление блока с ценой, нужно будет редактировать все страницы каталога. Если товаров немного, это еще можно вытерпеть, но если их сотни и тысячи, то это будет тихий кошмар! Именно поэтому я обрадовался новой возможности и решил вывести цену на продукт в отдельное поле.

Делается это следующим образом, вот пошаговая инструкция.

1. Создаем группу полей

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

Идем в менеджер материалов и в правой колонке выбираем пункт Field Group . В ней пока пусто, но есть кнопка "Создать", при помощи которой мы создаем группу. По сути, нужно ввести только ее имя, никакие другие настройки менять нет необходимости. Пусть эта группа будет называться "Цены".

2. Создаем поля в группе

Идем в раздел Fields и создаем поля. В настройках создаваемого поля нужно указать его название и выбрать тип. По умолчанию это текстовое поле, однако, можно выбрать и другие типы данных. Их набор довольно обширный - начиная от простых целых чисел, заканчивая элементами форм, картинками и целыми галереями. остановимся пока на обычном текстовом поле, так как цена должна быть указана не простом числом, а в формате "от ***** рублей".

Не забываем указать привязку данного поля к группе - она на картинке помечена красным. В этом же диалоге можно указать привязку данного поля ко всем категориям контента, либо только к выбранным. Пока оставим привязку ко всем категориям.

3. Открываем статью для редактирования

В том же Менеджере материалов переходим в раздел "Материалы" и открываем любую статью для редактирования. При этом в редакторе у нас появится новая вкладка - "Цены". Это как раз та самая группа полей, которую мы создали в п.1

После этого идем на сайт и видим, что под заголовком статьи появилась строчка с данными из поля. Но оформление по умолчанию у нее не очень интересное - она выглядит как обычный текст.

Чтобы выделить информацию из пользовательского поля, нам нужно задать CSS-свойства для классов .field-label и .field-value . Для этого идем в "Расширения" - "Менеджер шаблонов", находим в списке наш шаблон и кликаем по ссылке в ПРАВОЙ колонке. Открывается редактор файлов шаблона. Нам нужно найти основной CSS-файл. В случае шаблона Protostar (а также других шаблонов, созданных на его основе) этот файл расположен по адресу CSS\template.css

В код справа нужно добавить строки, описывающие стиль элементов, например, эти:

Field-value {font-size: 1.5em; color: #D13D0F;}
.field-label {font-size: 1.5em; color: #000;}

Вставлять строки можно в любое место. Вставили, сохранили. Теперь идем на сайт и видим, что поле стало более заметным.

Таким образом мы убили одним выстрелом двух зайцев - реализовали единообразное оформление блока с ценами на всем сайте, а также обеспецили себе удобство при добавлении новых товаров в каталог.

Достоинства и недостатки пользовательских полей

Признаюсь честно, я недостаточно изучил новую опцию, чтобы дать исчерпывающий ответ на этот вопрос, но очевидный плюс пользовательских полей - наконец-то можно организовать каталог товаров на сайте, не прибегая к помощи сторонних расширений, напрмер, K2. Ничего против K2 не имею, но я не сторонник перегружать сайт расширениями, так как хоть немного, но замедляет сайт, потребляя при этом дополнительную память и время ЦП, а также является потенциальным источником уязвимостей.

Недостаток пока обнаружился один - невозможно делать подписи после поля. Например, строку "от 3 000 000 рублей" нельзя разбить на строковую и числовую компоненту, чтобы потом фильтровать товары по цене как по числу, а не как по строке. Можно, конечно указывать цену в виде целого числа, но выглядеть такая надпись будет слишком уж по-машинному - Цена, руб: 3000000 . Хочется надеяться, что когда-нибудь появится возможность форматировть представление полей по своему усмотрению.

Похожие публикации