Обновите таблицу SiteTree_Localised из скрипта - PullRequest
0 голосов
/ 26 февраля 2019

Я обновил сайт Silverstripe с 3.x до 4.x.

3.x использовал многоязычный для перевода, теперь в 4.x я заменил многоязычный на модуль Silverstripe Fluent, но мне интересно, как я могу импортировать данные (переведенные поля) в новую систему с Fluent на месте.

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

$record = SiteTree_Localised::get()->filter(array( 
      'RecordID' => 16, 
      'Locale' => 'de_DE' 
  ))->first(); 
$record->Title = 'Some title'; 
$record->write();

Но это не работает, так как объект SiteTree_Localised не существует?Как мне обновить вышеуказанную запись?

1 Ответ

0 голосов
/ 27 февраля 2019

Таблица базы данных SiteTree_Localised не доступна напрямую через ORM, но заворачивается в ловушку с помощью манипулирования ORM Fluent.Вы можете получить доступ и изменить записи в этой таблице, изменив «FluentState», а затем записав запись, как обычно, в SilverStripe.

Вот как вы будете писать объекты в определенном контексте Fluent в SilverStripe 4:

FluentState::singleton()->withState(function (FluentState $newState) {
    $newState->setLocale('de_DE');

    $record = SiteTree::get()->byID(16);
    $record->Title = 'Some title';
    $record->write();
});

Вы можете сделать это в цикле (например, из дампа данных) и передать необходимые данные через use ($data, $locale) в обратный вызов withState.

Также есть BuiltTask для перехода с переводимого на беглый , который не поможет вам напрямую, но может дать некоторое представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...