Создание нового меню

1. Заходим в административную часть сайта CMS Joomla!

2. Нажимаем Menus > Menu Manager (Все меню > Меню) в вехнем меню админки. Местонахождение Менеджера меню показано на рисунке.

3. Нажимаем иконку New (Создать). На рисунке показано положение кнопки New/Edit (Создать/Изменить).

4. Заполните следующие поля в соответствии с требованиями:

  • Unique Name (Системное имя): Идентификационное имя используется Joomla! для идентификации этого меню. Системное имя должно быть уникальным. Использовать пробелы в системном имени не рекомендуется. Это имя отображается в параметрах модуля меню (mod_menu).
  • Title (Заголовок): Название меню. Это название отображается в списке всех меню в Менеджере Меню.
  • Description (Описание): Описание меню для различных пояснений о его предназначении.
  • Module Title (Заголовок Модуля): Название, которое будет присваиваться модулю меню mod_mainmenu в Менеджере Модулей сайта. Это название будет опубликовано на сайте (если у вас стоит галочка «Показывать заголовок» в деталях модуля). Этот заголовок будет отображаться только при создании нового модуля меню. Однако он может быть изменен в Менеджере Модуле. Если оставить пустым, модуль не будет создан, и вы не сможете опубликовать этот модуль меню.

5. Нажмите Save (Сохранить) для сохранения нового меню.


  • Для отмены создания нового меню нажмите Cancel (Отмена).

Теперь вы можете добавлять  новые пункты меню в созданное меню.

Примечания: Все созданные меню по умолчанию отключены (disabled).

Как отключить кеш в Joomla

Для отключения кеша необходимо снять с публикации соответствующий плагин и отключить кеширование в общих настройках сайта:
Общие настройки -> Система -> Установки кеша -> Включить кеширование -> выберите «Нет» (этим действием мы отключаем общее кеширование сайта — модули и прочее).

Расширения -> Менеджер плагинов -> System — Cache (или Система — Кеш) — отключаете плагин (плагин отвечает за кеширование контента (материалов).

Совместимость Joomla 1.0 и PHP 5.3

Устаревшая линейка Joomla! 1.0.x имеет определенную несовместимость с версией PHP 5.3.x
Появляются ошибки типа:
Deprecated: Assigning the return value of new by reference is deprecated in /includes/joomla.php on line 836 Deprecated: Function split() is deprecated in /offlinebar.php on line 32
Если у вас имеется сайт на Joomla! 1.0 и хостер внезапно сменил на сервере версию PHP на 5.3 то вам может помочь набор фиксов:
В первую очередь нужно восстановить отображение контента, тоесть com_content. Находим и открываем файл /includes/Cache/Lite/Function.php
В этом файле находим следующие строки:

$arguments = func_get_args();

Заменяем ее на:

$arguments = func_get_args();
$numargs = func_num_args();
for($i=1; $i < $numargs; $i++){
$arguments[$i] = &$arguments[$i];
}

Либо вносим изменения в следующие строки:

$result = call_user_func_array(array($class, $method), $arguments);

Меняем на:

$result = call_user_func_array(array($class, $method), &$arguments);

Строку:

$result = call_user_func_array(array($object_123456789, $method), $arguments);

Меняем на:

$result = call_user_func_array(array($object_123456789, $method), &$arguments);

Строку:

$result = call_user_func_array($target, $arguments);

Меняем на:

$result = call_user_func_array($target, &$arguments);


Также перестает работать стандартный компонент контактов (белый экран):
com_contacts использует includes/vcard.class.php который также нужно поправить, дабы избежать ошибки:

Fatal error: Cannot redeclare quoted_printable_encode() in includes/vcard.class.php on line 74

Найдите часть кода:

function quoted_printable_encode($input, $line_max=76) {
/* ... */
}

И замените его на:

if(!function_exists('quoted_printable_encode')) {
 function quoted_printable_encode($input, $line_max=76) {
/* ... */
}
}

Также у вас могут возникнуть проблеммы с часовыми поясами. Если вы используете стандартный SEF и используется файл .htaccess — проще всего будет добавить в него дополнительные установки:

# set the server timezone
SetEnv TZ Europe/Kiev

или 

# set the server timezone
SetEnv TZ Europe/Moscow

для часовых поясов Киева и Москвы соответственно.

Также может появится следующее сообщение:

Deprecated: Function ereg() is deprecated in includes/sef.php on line 533

Данная ошибка устраняется путем правки файла includes/sef.php
Находим и открываем данный файл. В нем находим примерно 370 строку:

if ($juri != '' && $juri != '/' && !eregi( "index\.php", $_SERVER['REQUEST_URI'] )
&& !eregi( "index2\.php", $_SERVER['REQUEST_URI'] ) && !eregi( "/\?", $_SERVER['REQUEST_URI'] )
&& $_SERVER['QUERY_STRING'] == '' ) {

Заменяем ее на :

if ($juri != '' && $juri != '/' && !preg_match( "index\.php/i", $_SERVER['REQUEST_URI'] )
&& !preg_match( "index2\.php/i", $_SERVER['REQUEST_URI'] ) && !preg_match( "/\?/i", $_SERVER['REQUEST_URI'] )
&& $_SERVER['QUERY_STRING'] == '' ) {

Находим примерно 388 строку:

if( $mosConfig_sef && $mosConfig_multilingual_support && $string!='index.php'
&& !eregi("^(([^:/?#]+):)",$string) && !strcasecmp(substr($string,0,9),'index.php')
&& !eregi('lang=', $string) ) {

Заменяем на:

if( $mosConfig_sef && $mosConfig_multilingual_support && $string!='index.php'
&& !preg_match("^(([^:/?#]+):)/i",$string) && !strcasecmp(substr($string,0,9),'index.php')
&& !preg_match('lang=/i', $string) ) {

Примерно 393 строка:

if ($mosConfig_sef && !eregi("^(([^:/?#]+):)",$string) && !strcasecmp(substr($string,0,9),'index.php')) {

Заменяем на:

if ($mosConfig_sef && !preg_match("/^(([^\/:?#]+):)/i",$string) && !strcasecmp(substr($string,0,9),'index.php')) {

409 строка:

if (preg_match('@^[A-Za-z][A-Za-z0-9:_.-]*$@', $url['fragment'])) {

Заменяем на:

if (preg_match('@^[A-Za-z][A-Za-z0-9:_.-]*$@/i', $url['fragment'])) {

И примерно 533 строку:

eregi("^(https?:[\/]+[^\/]+)(.*$)", $mosConfig_live_site, $live_site_parts);


Заменяем на:

preg_match("/^(https?:[\/]+[^\/]+)(.*$)/i", $mosConfig_live_site, $live_site_parts);
 

Как удалить Супер Администратора

Если вы попытаетесь удалить или заблокировать Супер Администратора в «Менеджере пользователей» сайта, вы увидите сообщение:
«Вы не можете удалить СуперАдминистратора» или «Вы не можете заблокировать пользователя уровня `СуперАдминистратор`» («You cannot delete (block) a Super Administrator«)
Для удаления нужно сделать следующее:
Заходите в «Менеджер пользователей», выбираете нужного пользователя, заходите в редактирование его аккаунта и понижаете группу пользователей с «Суперадминистратор» до «Зарегистрированный».

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

Массовое обновление или замена текста в Joomla

Бывают ситуации, когда необходимо на сайте заменить определенный тест (например — номер телефона).
Если сайт небольшой — можно заменить вручную из административной части сайта.
Также можно применить специальные компоненты, типа ReReplaser. Но не всегда использование сторонних компонентов рационально — как правило, они создают внушительную нагрузку на сервер.
Поэтому можно выполнить следующий трюк:
Заходим в нашу базу данных MySQL через phpMyAdmin (или любой другой клиент для работы с базами данных MySQL).
Открываем вкладку SQL, и выполняем следующий запрос:

UPDATE jos_content SET `fulltext` = replace(`fulltext`,"OldWord","NewWord");

где OldWord — часть текста, которую необходимо заменить
NewWord — текст, который необходимо вставить.

После этого будет произведена необходимая замена текста.

Как ускорить поиск по сайту

Выполнение следующих процедур немного ускорит поиск по вашему сайту.
Для многих сайтов, где используются только статичные материалы нужно в «Менеджере плагинов» отключить следующие плагины:
Поиск — Веб-ссылки  (Search — Weblinks)
Поиск — Контакты (Search — Contacts)
Поиск — Категории (Search — Categories)
Поиск — Разделы (Search — Sections)
Поиск — Ленты новостей (Search — Newsfeeds)

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

Решение проблемы Invalid Token

Если вы читаете эту статью, то, скорее всего, вы столкнулись с проблемой при авторизации на своем сайте. При попытке войти в админку вам выдает сообщение — Invalid Token.Чаще всего ошибка возникает в том случае, если для сессии пользователя не может быть обнаружен объект user — происходит после переноса сайта с локали на сервер, или переезда на другой хостинг. Если простая чистка кеша сайта не помогает (удаление содержимого папки cache в корне сайта и в папке administrator), не помогает и попытка авторизироваться с www и без www в админке, то далее уже могут быть варианты.

Для  начала обновимся до последней версии — Joomla 1.5.24 (конечно, если же вы используете J! 1.5.x). В ранних версиях проблема доступа Invalid Token была распространенной, и решалась обновлением ядра. Маловероятно, что вы испльзуете столь уж древние версии, но, тем не менее, обновление не помешает в любом случае (если вы фанат хаков ядра — для начала делаем полный бекап сайта, если нет — тоже делаем, на всякий случай). Пробуем залогинится в админке. Если проблема не пропала — читаем дальше и, после каждого действия, проверяем авторизацию на предмет Invalid Token.

Заходим в phpMyAdmin (или другой интерфейс для управления базой данных), выбираем нашу базу и находим таблицу jos_plugins (вместо jos_ может быть другой префикс. Если в базе есть таблицы с разными префиксами, проверьте в конфигурации (configuration.php в корне сайта) строку var $dbprefix дабы выяснить какой префикс нам нужен.
Ищем строку «User – Joomla!» и убеждаемся в том, что плагин включен (в поле «published» значение 1 — включено, 0 — выключено).
Далее ищем плагин «Authentication – Joomla» — аналогично проверяем активность плагина.

Если плагины были включены, проверим также права доступа пользователя. Открываем таблицу jos_users и находим там нашего пользователя (SuperAdmin к примеру). В поле «id» должно быть значение 62. В поле «gid» — 25 или 26.
В таблице jos_core_acl_aro смотрим ячейку id для нашего пользователя — обычно id = 10.
В таблица jos_core_acl_groups_aro_map найдите строку для aro_id 10. Поле group_id должно быть 25 или 26

Находим таблицу jos_session и удалеям все записи. Не удалите по ошибке всю таблицу — нужно всего лишь очистить ее записи. Как правило, после вышеперечисленных действий навязчивый Invalid Token пропадает.

Но не всегда. Иногда Invalid Token может возникнуть вследствие выставления неоправданно большого времени жизни сессии в общих настройках сайта. Для сброса времени жизни сессии необходимо открыть configuration.php и в переменной $lifetime выставить вменяемое время (в секундах).

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

Ошибка базы данных MySQL #1064 — USING BTREE

При импорте базы данных Joomla! 2.5 иногда возникает следующая ошибка:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server
 version for the right syntax to use near 'USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=9' at line xx

Ошибка возникает при импорте таблицы _usergroups. Например:

CREATE TABLE IF NOT EXISTS `id0ap_usergroups` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
  `parent_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Adjacency List Reference Id',
  `lft` int(11) NOT NULL DEFAULT '0' COMMENT 'Nested set lft.',
  `rgt` int(11) NOT NULL DEFAULT '0' COMMENT 'Nested set rgt.',
  `title` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_usergroup_parent_title_lookup` (`parent_id`,`title`),
  KEY `idx_usergroup_title_lookup` (`title`),
  KEY `idx_usergroup_adjacency_lookup` (`parent_id`),
  KEY `idx_usergroup_nested_set_lookup` (`lft`,`rgt`) USING BTREE
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

Вместо ENGINE=MyISAM может быть ENGINE=InnoDB или иное значение, что не принципиально.

Проблема собственно в использовании в запросе структуры индекса данных BTREE (Б-дерево) — двоичное дерево памяти.

Такая ситуация возникает вследствие того, что экспорт базы данных сделан на сервере MySQL, версия которого новее того сервера, на который дамп импортируется. А конкретно — версия сервера MySQL с которого был сделан дамп — 5.1.40, а версия сервера MySQL, на который импортируется дамп — 5.0.51 (версии могут незначительно отличаться).

Решение простое — удаляем из запроса USING BTREE и импортируем базу повторно.

Добавляем тег span в меню Joomla! 2.5

В процессе миграции сайта c Joomla! 1.5 на Joomla! 2.5 и адаптации шаблона возникли нестыковки со стандартными меню. На старом сайте пункты меню обрамлялись тегами <span>, а на новом, на версии 2.5 — обрамление этими тегами отсутсвовало. Соответственно и стили меню от старого шаблона к новому цеплялись неполноценно.

Для решения этой проблемы необходимо открыть файл /modules/mod_menu/tmpl/default_component.php находим примерно 26 строчку:

?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" <?php echo $title; ?>>
<?php echo $linktype; ?></a><?php

 Обрамляем тегом <span> вывод пункта меню:

<span><?php echo $linktype; ?></span>

 Таким образом эта строчка должна приобрести следующий вид:

?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" <?php echo $title; ?>>
<span><?php echo $linktype; ?></a></span><?php

 Аналогичные манипуляции проделаем и со строчками 30 и 34 (примерно) — эти строки выводят пункты меню при открытии ссылок в новом окне. Вот что должно быть на выходе:

?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" target="_blank" <?php echo $title; ?>>
<span><?php echo $linktype; ?></span></a><?php
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>"onclick="window.open(this.href, 'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes');return false;"
 <?php echo $title; ?>>
<span><?php echo $linktype; ?></span></a>

Аналогичные манипуляции проделываем и в файлах default_url.php и default_separator.php. Эти файлы отвечают за вывод различных типов пунктов меню. Приводить пример не буду, все делается по аналогии с первым файлом — default_component.php

Вместо русских символов ??? в Joomla 1.0

Если вместо русскоязычных символов (кириллических) на сайте Joomla 1.0 отображаются знаки вопроса ??????? первым делом необходимо проверить таблицы базы данных. Если в записях таблиц, например jos_content, русский текст отображается нормально — все хорошо, необходимо настроить сайт на выдачу страниц в нужной кодировке.

Если в базе данных в таблицах отсутствуют русские символи (кириллица) то необходимо выполнить экспорт базы данных снова, указав правильную кодировку экспортируемого файла — ту кодировку, в которой существуют таблицы базы данных сайта.

В конфигурационном файле configuration.php должна быть указана локаль — $mosConfig_locale = ‘ru_RU.CP1251’;

Кодировка базы данных MySQL должна быть cp1251_general_ci, кодировка таблиц базы данных — cp1251_general_ci.

В файле .htaccess добавьте строку AddDefaultCharset WINDOWS-1251.

Если вы не можете восстановить правильную кодировку на Денвере, несмотря на то, что выполнили все выше перечисленные рекомендации — то необходимо создать нового пользователя базы данных MySQL и прописать его в конфигурационном файле сайта на Joomla 1.0