Приветствую. Создал данную тему, поскольку не раз попадал на подобные, но слегка другого плана. Безусловно, уже есть плагины для мультиязыка статей и не только. Но я задался другим вопросом: при добавлении статьи чтобы был выбор языка. Ничего сложного в принципе (поначалу так подумал) нету, отредактировал нужный файл, добавил табы с парочкой языков. В итоге, при смене языка на сайте меняется и контент. Но проблема заключается в ссылке. Она генерируется только с первой вкладки (стандартный весь код в ней для добавления статьи). Это понятно, почему, поскольку для других вкладок необходимо дописывать другие переменные и значения в БД. На примере это выглядит так:
есть статья со ссылкой /stati/geologija/russia.html — на русском. Если меняю язык на английский, ссылка остается такая же /stati/geologija/russia.html, происходит смена только контента.
Сама идея такова: при добавлении статьи левая колонка разбита табами на разные языки, есть возможность добавлять контент в редактор. Снизу поле для генерации для каждого языка ключей, справа на первом языке все как в стандарте (вкладки и т.п.), на остальных — задается только сеолинк и сеоданные с вкладки SEO (или это лишнее с вкладкой, пока не знаю).
Проблема заключается в том, какой файл редактировать для генерации ссылок на другие языки (по заголовку, как при добавлении статьи на обычном русском), файл для сеолинка я так полагаю этот components/content/model.php. Но он связан напрямую, получается, с категориями для статей. Потому необходимо по идеи редактировать еще и файл, который отвечает за категории статей.
В общем, подскажите, в каких файлах стоит "копаться".
З.Ы. может есть путь проще, как-то подключить к добавлению статьи такого рода функционал. Буду признателен за идеи.
З.Ы.з.ы. интересуют только статьи.
#2
19 апреля 2014 в 12:45
Вопрос актуален. Со статьями и категориями разобрался. Не могу найти, который файл отвечает за вывод ссылки в строке браузера. Подскажите, пожалуйста.
#3
19 апреля 2014 в 22:49
Вопрос актуален. Со статьями и категориями разобрался. Не могу найти, который файл отвечает за вывод ссылки в строке браузера. Подскажите, пожалуйста.
router не?
Сегодня в 05:58
#4
19 апреля 2014 в 23:44
На самом деле все намного сложнее, не какими плагинами тут не обойтись и для поддержки нормального мультиязыка нужно переписать всю внутрянку компонента статей. Делается все по принципу разделения записей, фактически для каждого языка в базе должна быть запись, так например статья Новости должна будет создать по 1 записи на каждый язык в БД. для нормальной работы а точнее выборки нужно внести в таблицу контента и категорий, поле language по которому в последствии выбирать данные для отображения на сайте. Следовательно для заголовка из каждого языка можно будет получить ветку категории на этом языке и создать правильный seolink. Который будет уникальным и самое главное правильным с точки зрения поисковика.
Вот вся кухня мультиязычности статей.
Вот вся кухня мультиязычности статей.
#5
20 апреля 2014 в 11:22
maxisoft, тем и занимаюсь, в общем-то. С контентом все норм, категории так же допилил, чтобы и на других языках можно было заполнять. А вот вывод статьи остался как в первом посте. Ссылка не меняется. Копаю model.php компонента content. Но пока безрезультатно что-то. В нем есть обновление статей и ссылок, функции. По идеи это их править необходимо.
?
public function addArticle($article){ $article = cmsCore::callEvent('ADD_ARTICLE', $article); if ($article['url']) { $article['url'] = cmsCore::strToURL($article['url'], $this->config['is_url_cyrillic']); } // получаем значение порядка последней статьи $last_ordering = (int)$this->inDB->get_field('cms_content', "category_id = '{$article['category_id']}' ORDER BY ordering DESC", 'ordering'); $article['ordering'] = $last_ordering+1; $article['id'] = $this->inDB->insert('cms_content', $article); if ($article['id']){ $article['seolink'] = $this->getSeoLink($article); $this->inDB->query("UPDATE cms_content SET seolink='{$article['seolink']}' WHERE id = '{$article['id']}'"); cmsInsertTags($article['tags'], 'content', $article['id']); if ($article['published']) { cmsCore::callEvent('ADD_ARTICLE_DONE', $article); } } return $article['id'] ? $article['id'] : false; }
для создание правильного seolink нужно тебе смотреть
тут тебе нужно рассмотреть вариант задания url на разных языках в ручную, при этом если язык отличный от ru исключить кирилические seolink'и
и второй момент это генерация seolink по title статьи
Здесь то о чем я писал нужно получать ветки категории для каждого языка и формировать seotitle для каждого языка. Вот если это сделаешь то будет тогда 100% мультиязычность.
if ($article['url']) { $article['url'] = cmsCore::strToURL($article['url'], $this->config['is_url_cyrillic']); }
и второй момент это генерация seolink по title статьи
$article['seolink'] = $this->getSeoLink($article);