Есть две информационных системы, абсолютно идентичные по доп. свойствам элементов.
Создаю линк элемента в одной из них, переношу в другую - доп. свойства не переносятся!
Я уже год бьюсь над тем, как реализовать на HostCMS одинаковые по контенту языковые версии, и куда ни ткнись - нет возможности...
Почему не переносятся доп. свойства? Потому что у них разные идентификаторы? Но это же бред... Неужели так сложно сделать, чтобы подхватывались свойства с одинаковыми наименованиями XML-тэгов при переносе ярлыка?
это как? Насколько я понимаю, языковые версии это, допустим, сайт на русском, и сайт на английском, так? Контент это тексты инфоэлементов, которые на одном сайте должны быть русскими, а на другом - английскими.
А что же тогда значит приведенная мною цитата?
Вообще, расскажите свою задачу с самого начала, чего вы хотите сделать, и почему у вас это не получается, может быть придумаем вместе какое-то решение.
Это значит, что если есть фото в русской версии - обязательно есть это же фото и в английской, только название и описание на другом языке. Аналогично - с новостями и прочими элементами инфосистем. Это значит - невозможно развивать только русскую версию, "забив" на английскую и оставив ее "на потом". Такая архитектура очень дисциплинирует контент-мэйкеров, знаете ли.
Задача: русский контент находится на путях "от корня", абсолютно идентичный по структуре английский контент - в /eng от корня. Есть допустим новость /news/151 - она же отображается по пути /eng/news/151, только на английском языке.
дык... эта... ну первая мысль которая мне приходит в голову - это использовать один и тот же элемент одной и той же ИС на обоих сайтах.
Вот смотрите:
Определение текущей группы/элемента ИС происходит в настройках тдс исходя из текущего пути. Соответствено, если перед определением из пути выбросить часть /eng/ то определится нужная нам группа/элемент.
Наличие же части /eng/ следует также контролировать и в самой ТДС и передавать соотв. маркер в xml, через $external_propertys.
Основной контент сайта, скажем, русский, хранить в основых свойствах элемента, английский контент - в дополнительных.
В xsl же, в соответствии со значением переданного маркера выводить пользователю текст либо из основного свойства, либо из дополнительного.
Ну вот примерно такое направление.
Правда остается еще привязка ИС к разным узлам структуры, в /eng/ возможно придется делать отображение немного обходными путями, или еще что-нибудь подкрутить в настройках ТДС.
Аха, и мне это видится точно так же.
Только вот предложенное решение - - не сработало. Поэтому попыталась я подоткнуть эти костыли с линками - облом и тут.
Именно с привязкой одной ИС к разным путям и есть огромная засада.
Ну вот вам демка:
Русский:
Английский:
Сделано наспех, поэтому на английский там "переведены" только два элемента.
Делается очень просто.
Создаем у ТДС параметр "префикс английского раздела", называем его переменную english_version_url.
В структуре сайта в англоязычной части создаем раздел новости, все параметры настраиваем как обычно, параметр "префикс" указываем eng (если у вас английская часть по адресу /eng/)
В настройках ТДС вставляем следующий фрагмент:
//часть кода выше вставки
///////////////////////////////////////////
// Если указание на страницу - не прерываем определение
if (ereg ("^part-([0-9]*)$", end($GLOBALS['URL_ARRAY']), $regs) && to_int($regs[1]) > 0)
{
/* Страница умножается на кол-во элементов, выводимых на страницу */
$break_if_path_not_found = false;
$GLOBALS['part_ii'] = $regs[1];
}
else
{
$break_if_path_not_found = true;
$GLOBALS['part_ii'] = 1;
}
/** ИЗМЕНЕННЫЙ КУСОК ДЛЯ МУЛЬТИРАЗДЕЛА */
/* проверим, не находимся ли мы в английской части сайта */
$english_version_url = to_str($GLOBALS['LA']['english_version_url']);
$url_array = $GLOBALS['URL_ARRAY'];
/* получаем для пути ассоциативный массив с id группы и id/url элемента для данной инфосистемы */
$GLOBALS['INFSYS_result'] = $GLOBALS['LA_InformationSystem']->GetInformationFromPath($InformationSystem_id, $url_array, $break_if_path_not_found);
/** КОНЕЦ ИЗМЕНЕННОГО КУСКА ДЛЯ МУЛЬТИРАЗДЕЛА */
/* Если путь существует */
if ($GLOBALS['INFSYS_result'])
//ну и так далее
(я привел еще часть окружающего кода для ориентировки)
а в коде самой ТДС делаем такую вставку:
/* Массив внешних параметров, передаваемых в XML */
$external_propertys = array();
/** ИЗМЕНЕННЫЙ КУСОК ДЛЯ МУЛЬТИРАЗДЕЛА */
/* проверим, не находимся ли мы в английской части сайта
и передадим в xml соответсвующий маркер */
$english_version_url = to_str($GLOBALS['LA']['english_version_url']);
$url_array = $GLOBALS['URL_ARRAY'];
if ($url_array[0] == $english_version_url) {
$external_propertys['english_version_enable'] = 1;
$external_propertys['version_prefix'] = '/'.$english_version_url;
} else {
$external_propertys['english_version_enable'] = 0;
$external_propertys['version_prefix'] = '';
}
В xsl-шаблонах, во все урл вставляем часть {/document/version_prefix}, для вывода префикса. Когда сайт на русском сам префикс будет нулевой, для английской версии - /eng
Например:
<a href="{/document/version_prefix}{item_path}">
А вывод замещаемого контента реализуем через допсвойства.
Вот так выглядит вывод заголовка в списке элементов:
Если что-то будет не понятно - стучитесь ко мне в аську, я дам вам вход от тестового сайта, ссылки на который я дал в самом начале этого поста - поковыряетесь сами.
Вообще это конечно все наспех, нехорошо, что префикс в структуре впечатывается руками. По-хорошему надо бы переделать чтобы он определялся из id раздела структуры. Сможете сами?