Вопросы по мультиязычности

#1 16 апреля 2014 в 13:19
Приветствую. Создал данную тему, поскольку не раз попадал на подобные, но слегка другого плана. Безусловно, уже есть плагины для мультиязыка статей и не только. Но я задался другим вопросом: при добавлении статьи чтобы был выбор языка. Ничего сложного в принципе (поначалу так подумал) нету, отредактировал нужный файл, добавил табы с парочкой языков. В итоге, при смене языка на сайте меняется и контент. Но проблема заключается в ссылке. Она генерируется только с первой вкладки (стандартный весь код в ней для добавления статьи). Это понятно, почему, поскольку для других вкладок необходимо дописывать другие переменные и значения в БД. На примере это выглядит так:

есть статья со ссылкой /stati/geologija/russia.html — на русском. Если меняю язык на английский, ссылка остается такая же /stati/geologija/russia.html, происходит смена только контента.

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

Проблема заключается в том, какой файл редактировать для генерации ссылок на другие языки (по заголовку, как при добавлении статьи на обычном русском), файл для сеолинка я так полагаю этот components/content/model.php. Но он связан напрямую, получается, с категориями для статей. Потому необходимо по идеи редактировать еще и файл, который отвечает за категории статей.

В общем, подскажите, в каких файлах стоит "копаться".

З.Ы. может есть путь проще, как-то подключить к добавлению статьи такого рода функционал. Буду признателен за идеи.
З.Ы.з.ы. интересуют только статьи.
#2 19 апреля 2014 в 12:45
Вопрос актуален. Со статьями и категориями разобрался. Не могу найти, который файл отвечает за вывод ссылки в строке браузера. Подскажите, пожалуйста.
#3 19 апреля 2014 в 22:49


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

scanread

router не?
#4 19 апреля 2014 в 23:44
На самом деле все намного сложнее, не какими плагинами тут не обойтись и для поддержки нормального мультиязыка нужно переписать всю внутрянку компонента статей. Делается все по принципу разделения записей, фактически для каждого языка в базе должна быть запись, так например статья Новости должна будет создать по 1 записи на каждый язык в БД. для нормальной работы а точнее выборки нужно внести в таблицу контента и категорий, поле language по которому в последствии выбирать данные для отображения на сайте. Следовательно для заголовка из каждого языка можно будет получить ветку категории на этом языке и создать правильный seolink. Который будет уникальным и самое главное правильным с точки зрения поисковика.

Вот вся кухня мультиязычности статей.
#5 20 апреля 2014 в 11:22
maxisoft, тем и занимаюсь, в общем-то. С контентом все норм, категории так же допилил, чтобы и на других языках можно было заполнять. А вот вывод статьи остался как в первом посте. Ссылка не меняется. Копаю model.php компонента content. Но пока безрезультатно что-то. В нем есть обновление статей и ссылок, функции. По идеи это их править необходимо.

  1.  
  2. public function addArticle($article){
  3.  
  4. $article = cmsCore::callEvent('ADD_ARTICLE', $article);
  5.  
  6. if ($article['url']) { $article['url'] = cmsCore::strToURL($article['url'], $this->config['is_url_cyrillic']); }
  7.  
  8.  
  9. // получаем значение порядка последней статьи
  10. $last_ordering = (int)$this->inDB->get_field('cms_content', "category_id = '{$article['category_id']}' ORDER BY ordering DESC", 'ordering');
  11. $article['ordering'] = $last_ordering+1;
  12.  
  13. $article['id'] = $this->inDB->insert('cms_content', $article);
  14.  
  15. if ($article['id']){
  16.  
  17. $article['seolink'] = $this->getSeoLink($article);
  18.  
  19.  
  20.  
  21. $this->inDB->query("UPDATE cms_content SET seolink='{$article['seolink']}' WHERE id = '{$article['id']}'");
  22.  
  23.  
  24.  
  25. cmsInsertTags($article['tags'], 'content', $article['id']);
  26.  
  27. if ($article['published']) { cmsCore::callEvent('ADD_ARTICLE_DONE', $article); }
  28.  
  29. }
  30.  
  31. return $article['id'] ? $article['id'] : false;
  32. }
  33.  
?
#6 20 апреля 2014 в 11:49
для создание правильного seolink нужно тебе смотреть
  1. if ($article['url']) { $article['url'] = cmsCore::strToURL($article['url'], $this->config['is_url_cyrillic']); }
тут тебе нужно рассмотреть вариант задания url на разных языках в ручную, при этом если язык отличный от ru исключить кирилические seolink'и

и второй момент это генерация seolink по title статьи
  1. $article['seolink'] = $this->getSeoLink($article);
Здесь то о чем я писал нужно получать ветки категории для каждого языка и формировать seotitle для каждого языка. Вот если это сделаешь то будет тогда 100% мультиязычность.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.