Транслитерация в shop script 5

8 Февраля 2015

Продолжается серия статей, посвященных Shop-Script 5. Сегодня мы рассмотрим возможности, связанные с транслитерацией символов в данном приложении. Методы, которые позволяют реализовывать подобный функционал, принадлежат классу shopHelper, который расположен в директории /wa-apps/shop/lib/classes/.

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

$str = 'произвольная чпу-ссылка';
$strTransliterated = shopHelper::transliterate($str);// если на вход подать пустую строку, и в качестве второго параметра передать false, то метод вернет время в формате Ymd

Второй метод, который некоторым образом связан с транслитерацией – genUniqueUrl. Благодаря нему можно спокойно и непринужденно генерировать ссылки, которые в принципе не будут повторяться.


$url = 'Смартфон Apple iPhone 6 Plus 16GB Gold (MGAA2RU/A)';// ссылка
$shopProduct = new shopProductModel();// указываем модель, для которой будет происходить создание уникальной ссылки, поле в таблице для ссылки - url
$uniqueUrl = shopHelper::genUniqueUrl($url, $shopProduct);// на выходе получаем ссылку в нужном виде.

Также стоит отметить, что если Вас по какой-то причине не устраивают правила транслитерации, то в общем-то Вы можете отредактировать системный файл под названием ru_RU.php(translit_table), файл располагается в директории wa-system/locale/data/

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

Js-код для транслитерации:

var data = {
 'str': "проверочная ссылка"// ссылка, которую необходимо преобразовать к нужному виду
};
$.ajax({
 url: '/webasyst/shop/?action=transliterate',
 data: data,
 dataType: 'json',
 success: function(response){
  if (response.status == 'ok') {
   console.log(response.data);
   // дальнейшая обработка кода
   }
 }
});

Спасибо за внимание, удачи!

0
Комментарии
Calimki
09.02.2015 в 21:01
Спасибо! Давно было интересно узнать, как это делается. Павел, а поясни пожалуйста: при использовании строки транслитерации ты просто заменяешь символ русской раскладки на латиницу (к примеру, У=U) или там другой механизм? И эта строка для замены задаётся вручную или это особенность используемой функции?
Павел в ответ на комментарий
10.02.2015 в 19:50
Да не за что. Еще раз спасибо за дизайн). Что касается твоего вопроса, то есть таблица соответствий( ну а если точнее, то массив), где ключом является русская буква, а значением - английская. Например, букве "ы" соответствует "y". Ну а потом уже с помощью php, все символы в строке заменяются на свои соответствия.
Calimki в ответ на комментарий
11.02.2015 в 15:01
Окей, тогда вопрос по второму методу: там ссылки тоже будут генериться как транслитерация заголовков или это будет рандомный набор символов?
Павел в ответ на комментарий
11.02.2015 в 18:50
Да, на вход подается строка, на выходе получаем соответствующую ссылку(с учетом транслитерации), но если подобная ссылка уже существовала, то к ней в конец будут добавляться определенные символы, чтобы сделать её уникальной.

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