Плагин I18n

Плагин для создания многоязычных сайтов и многоуровневой навигации

на

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

Скачать плагин
Файл скачан 2123 раз(а)

Так как описание этого плагина слишком длинное, для удобства выбора нужной вам функции я решил создать это меню, используя плагин SA TOC Anchors.

Для начала дам ответ на самый популярный вопрос. Для отключения ?lang=ru нужно добавить в файл gsconfig.php такую строчку:

define('I18N_IGNORE_USER_LANGUAGE',true);

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

Внимание: для создания выпадающего меню вы должны знать языки CSS и JS.

Так как GetSimple CMS может показывать в адресной строке только два уровня вложенности, Мартин добавил возможность показывать ВСЕ уровни. Для этого достаточно ввести в поле "Настройка ЧПУ" на странице настроек системы следующий код:

%parents%/%slug%/

Но если вы собрались использовать этот код, вместо

%parent%/%slug%/

то вам нужно обязательно заменить и get_header() на get_i18n_header(), иначе ваши канонические ссылки будут выглядеть не должным образом.

Если вы используете на сайте только один язык, чтобы отключить выбор языка и описание создания страниц на других языках, вы можете добавить в файл gsconfig.php следующий код:

define('I18N_SINGLE_LANGUAGE', true);

Админпанель

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

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

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

При использовании функции интернализации плагина вы должны ввести в поле "Язык для всех страниц с URL без кода языка"  код вашего языка.

Коды для меню

Все основные коды вставляются между тегами <ul></ul>, простой код для многоуровневого меню выглядит так:

<?php get_i18n_navigation(return_page_slug(),0,99,I18N_SHOW_NORMAL); ?>

И так, давайте рассмотрим, что здесь что. Цифры означают уровни меню. Если вы не хотите показывать, например в сайдбаре первый уровень меню, вы можете заменить 0 на 1.

Для меню существует еще несколько параметров

  • I18N_SHOW_NORMAL — может и не использоваться, так как и без него меню работает нормально;
  • I18N_SHOW_MENU — включить в меню только ссылки на страницы добавленные в меню и показать все подменю, без этого параметра ссылки на дочерние страницы изначально в меню включены не будут, а будут показаны только при переходе на родительскую страницу;
  • I18N_SHOW_PAGES и I18N_SHOW_TITLES — показать ссылки на все страницы, независимо от того, находятся они в меню или нет (последний показывает заголовки вместо текста ссылки);
  • I18N_SHOW_LANGUAGE как и I18N_SHOW_NORMAL — показать ссылки на страницы текущего языка.

Так же можно добавлять по несколько фильтров

  • I18N_FILTER_NONE - нет фильтра (частные страницы всегда фильтруется);
  • I18N_FILTER_CURRENT - показать ссылки на дочерние страницы только после открытия родительской страницы;
  • I18N_FILTER_LANGUAGE - показать ссылки только на страницы текущего языка;
  • I18N_FILTER_MENU - показать только ссылки на страницы, добавленные в меню;
  • I18N_OUTPUT_MENU - вывод названия меню;
  • I18N_OUTPUT_TITLE - вывод заголовка страницы, вместо текста ссылки.

Например, вы можете использовать такой код:

<?php get_i18n_navigation(return_page_slug(),0,99,I18N_FILTER_MENU | I18N_FILTER_CURRENT | I18N_OUTPUT_TITLE ); ?>

Для использования в CSS-файлах

Для использования в CSS-файлах для каждого тега <li>, в который заключена ссылка на родительскую страницу создается класс open, для тега <li> активной ссылки — класс current, а для тега <li> ссылки на родительскую страницу при открытой дочерней странице — класс currentpath.

Вы можете использовать эти классы для выделения активных ссылок. Например код в вашем файле CSS может выглядеть так:

li.currentpath a{
	color:#fff;
	background-color:#2b2d30;
}
li.current a{
	color : #C5400E;
	font-weight : bold;
}

Дополнительные функции навигации

Карта сайта

Для создания страницы карты сайта вставьте на нее любой из этих кодов, точнее, лучше вставьте в компонент и используйте код плагина DynPages:

  • Для отображения ссылок на все страницы.
    <?php get_i18n_navigation('index',0,99,I18N_SHOW_PAGES); ?>
  • Для отображения в ссылках заголовков всех страниц.
    <?php get_i18n_navigation('index',0,99,I18N_SHOW_TITLES); ?>
  • Для отображения только ссылок на страницы, добавленные в меню.
    <?php get_i18n_navigation('index',0,99,I18N_SHOW_MENU); ?>
  • Для мультиязычных сайтов.
    <?php get_i18n_navigation('index',0,99,I18N_SHOW_LANGUAGE); ?>

Хлебные крошки

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

<div class="breadcrumbs">    
<a href="<?php echo find_url('index',null); ?>">Главная</a>    
<?php get_i18n_breadcrumbs(return_page_slug()); ?>  
</div>

Несколько независимых меню

Если вам бы хотелось иметь несколько независимых меню отображаемых на всех страницах, вы можете создать пустую (фиктивную) родительскую страницу, а в меню добавлять только дочерние страницы. Чтобы показать это меню вы должны разместить либо в компоненте, либо в шаблоне следующий код:

<ul>
<?php
  $bc = return_i18n_breadcrumbs(return_page_slug());
  get_i18n_navigation($bc[0]['url']=='slug'?return_page_slug():'slug',1,99);
?>
</ul>

Замените slug на ссылку страницы.

Отображение меню всех дочерних страниц

Если вы хотите, чтобы всегда показывалось меню дочерних страниц конкретной родительской страницы вам достаточно использовать такой код:

<ul><?php get_i18n_navigation('page-slug',1,9); ?></ul>

Но если вы бы хотели выделять с помощью CSS активные пункты меню, то вам потребуется немного другой код:

<ul>  
<?php    $bc = return_i18n_breadcrumbs(return_page_slug());    get_i18n_navigation($bc[0]['url']=='slug'?return_page_slug():'slug',1,9);  
?>  
</ul>

Замените slug на ссылку страницы.

Если вдруг вам понадобится показывать ссылки на дочерние страницы только при переходе на родительскую страницу да еще и использовать в качестве заголовка текст ссылки родительской страницы, то вам потребуется вставить такой код:

<?php    
$bc = return_i18n_breadcrumbs(return_page_slug());    
$slug = $bc[0]['url'];    $pages = return_i18n_pages();    
if (@$pages[$slug]['children']) {      echo '<h3>'.$bc[0]['title'].'</h3>';      
echo '<ul class="sidemenu">';      
get_i18n_navigation(return_page_slug(),1,99);      
echo '</ul>';    }  
?>

Отображение ссылки на родительскую страницу

Если вы хотели бы отобразить на дочерних страницах ссылку на родительскую страницу, вы можете воспользоваться таким кодом:

<?php get_i18n_link(get_parent(false)); ?>

Видоизменение (рендеринг) меню

Если вы хотите использовать в меню дополнительные элементы — иконки или дополнительные тексты под ссылками или еще что, вы должны настроить дополнительные поля, используя плагин I18n Custom Fields, а затем создать компонент, например с таким кодом:

<li class="<?php echo $item->classes; ?>">
<a href="<?php echo htmlspecialchars($item->link); ?>">
<?php if (returnPageField($item->slug, 'menuicon')) { ?>
<img src="<?php echo htmlspecialchars(returnPageField($item->slug, 'menuicon')); ?>"/>
<?php } ?>
<?php echo htmlspecialchars($item->text); ?>
</a>
<?php if ($item->isOpen) { ?>
<ul><?php $item->outputChildren(); ?></ul>
<?php } ?>
</li>

Где menuicon — это имя поля, созданного в настройках плагина I18n Custom Fields. Тип поля в этом случае — Изображение. При создании страницы вам будет дана возможность выбрать любое загруженное в папку uploads изображение.

Код меню будет выглядеть так:

<?php get_i18n_navigation(return_page_slug(),0,0,I18N_SHOW_MENU, 'name_component'); ?>

Навигация по страницам

Ну и напоследок код, который уже был показан на странице Плагин I18n Search, так как именно для новостей эта навигация имеет особую актуальность. Если вы хотите воспользоваться этой функцией, вы должны создать компонент, например, pagenav, и вставить в него такой код:

<?php  
  $slug = (string) return_page_slug();
  $bc = return_i18n_breadcrumbs($slug);
$level = count($bc) - 1; $nav = return_i18n_menu_data($slug,$level,$level,I18N_SHOW_PAGES); $i = 0; while ($i < count($nav) && $nav[$i]['url'] != $slug) $i++; if ($i > 0) { echo '<a href="'.find_i18n_url($nav[$i-1]['url'],$nav[$i-1]['parent']). '">&lt;&lt; '.$nav[$i-1]['title'].'</a>&nbsp;&nbsp;&nbsp;'; } if ($i+1 < count($nav)) { echo '<a href="'.find_i18n_url($nav[$i+1]['url'],$nav[$i+1]['parent']). '">'.$nav[$i+1]['title'].' &gt;&gt;</a>'; } ?>

В код шаблона в этом случае нужно будет вставить код компонента:

<?php get_i18n_component('pagenav'); ?>

Либо, используя плагин DynPages, вы можете вставлять на каждой странице в редакторе такой код:

{% pagenav %}

Интернационализация сайта

Предлагаю вам ознакомиться с основными возможностями этого плагина — он позволяет создавать многоязычные сайты. Например, когда я тестировал этот плагин, я создал дополнительно еще 3 языковых версий сайта http://chaga-mushroom.ru/ (перевод, конечно сделал Гуглом, но письма поступают даже из Австралии). То есть плагин работает.

Итак, как сделать, чтобы страницы отображались на языке, который выбран основным для браузера? Да-да, ссылки для перехода на другой язык можно не указывать, если пользователь войдет на сайт, пользуясь браузером на языке, на который переведен сайт, страницы будут показаны ему именно на его языке.

Для этого вы должны использовать немного другие коды:

1. Для мета-тегов:

<?php get_i18n_header(); ?>

вместо <?php get_header(); ?>, этот же код позволит изменять каноническую ссылку для каждого языка. Этот тег также является обязательным, так как многие плагины используют его для включения файлов скриптов и CSS.

Такой код позволяет отключить загрузку метатегов:

<?php get_i18n_header(false); ?>

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

<?php get_i18n_header(true,array('generator', 'canonical', 'keywords', 'description')); ?>

Например, при использовании плагина News Manager требуется отключать метатег канонической ссылки.

2. Для отображения компонентов:

<?php get_i18n_component('name_component'); ?>

вместо <?php get_component('name_component'); ?>

3. Для меню код уже показанный выше:

<?php get_i18n_navigation(return_page_slug(),0,99, I18N_SHOW_LANGUAGE); ?>

вместо <?php get_navigation(return_page_slug()); ?>

4. Для включения текста других страниц:

<?php get_i18n_content('mypagename'); ?>

вместо <?php getPageContent('mypagename'); ?>.

Для создания страниц на других языках достаточно к адресу страницы-оригинала добавить символ "_" + код языка, например: index -> index_en или my-page -> my-page_de, вы можете выбрать любое количество языков, только помните, что ширина таблицы ограничена.

Для создания компонентов на других языках также нужно к имени компонента добавлять "_" + код языка, например: sidebar->sidebar_en.

Если вы намерены предоставлять пользователям возможность переключать языки, то можете использовать такую ссылку:

<a href="<?php echo htmlspecialchars(return_i18n_lang_url('de')); ?>">In deutsch</a>

Эта ссылка создает переход на текущую страницу с другим языком. А для смены языка текущей сессии вы можете использовать такую ссылку:

<a href="<?php echo htmlspecialchars(return_i18n_setlang_url('de')); ?>">deutsch</a>

На сайте автора есть описания различных манипуляций с файлами gsconfig.php и .htaccess, если вам это интересно предлагаю ознакомиться с ними в оригинале.

Назад

blog comments powered by Disqus
Эту страницу посетили 28737 раз(а).

Последние новости

Последние комментарии

Для контактов

Back to top