Saya punya satu tabel MySQL dengan konten Inggris / Perancis campuran di setiap baris. Saya mencoba mencari cara memigrasi ini ke situs Drupal yang dikonfigurasi i18n yang tepat.
Saya dapat meminta Migrasikan untuk mengimpor konten ke dalam satu bahasa, tetapi saya ingin migrasi ke kedua bahasa. Ada 901 baris, sehingga pada akhirnya harus membuat 1802 node yang terhubung.
Saya hanya tidak tahu bagaimana mengatur modul Migrasi untuk mengulang dua kali & menautkan node.
EDIT: Saya menggunakan ini dan dapat menggabungkan keduanya:
public function postImport() {
parent::postImport();
// $ii should really be determined by $count_query
$ii = 2000;
for ($i = 1; $i < $ii; $i++) {
// Confirm SQL in phpMyAdmin to verify
$query = "SELECT n.nid, tid.field_bv_transfer_id_value
FROM {field_revision_field_bv_transfer_id} tid
INNER JOIN node n ON tid.entity_id = n.nid
WHERE tid.field_bv_transfer_id_value = $i;";
$result = db_query($query);
// Reset for each import
$currentRowCount = $current_translateid = 0;
foreach ($result as $record) {
if ($currentRowCount % 2 == 0) {
$node = node_load($record->nid);
$node->pathauto_perform_alias = FALSE;
$node->tnid = $record->nid;
$current_translateid = $record->nid;
node_save($node);
} else {
$node = node_load($record->nid);
$node->pathauto_perform_alias = FALSE;
$node->tnid = $current_translateid;
node_save($node);
}
$currentRowCount++;
}
}
}
Jawaban:
Anda dapat membuat dua migrasi, keduanya dengan pemetaan yang sama (kecuali untuk nids), tetapi satu menyimpan node dalam bahasa Inggris dan yang kedua dalam bahasa Prancis.
sumber
Di prepowow () Anda mengembalikan benar atau salah. Ini menentukan apakah baris itu diproses dalam migrasi tertentu (dan bahkan dihitung).
Dengan cara ini, Anda dapat mendeteksi bahasa untuk setiap baris, dan hanya mengembalikan TRUE untuk baris yang berisi konten dalam bahasa tertentu untuk migrasi itu.
sehingga Anda dapat melakukan sesuatu seperti:
Cara yang lebih performan untuk melakukan ini, jika Anda akan melakukan hal migrasi ganda, adalah menambahkan kondisi () ke setiap permintaan sumber (jika Anda menggunakan MigrateSourceSQL), seperti -> condition ('lang', 'en', '=').
sumber
(Berikut ini berlaku untuk Drupal 7 - Saya tidak tahu tentang Drupal 6 atau sebelumnya.)
Saya kira Anda ingin mendefinisikan hubungan terjemahan antara simpul bahasa Inggris dan Prancis. Untuk melakukan itu, pertama, setiap node harus memiliki bahasa yang ditentukan, sebagaimana didefinisikan dalam
prepareRow()
:Kedua, Anda perlu mendefinisikan
tnid
node sumber menjadi miliknyanid
dantnid
node terjemahan menjadinid
node sumber. Catatan Anda dapat memilih bahasa acak untuk simpul sumber, dan bahkan dapat diterima untuk mencampur bahasa sumber antara konten yang berbeda. Pertanyaannya adalah bagaimana.(Catatan saya pikir hanya itu yang Anda butuhkan, tetapi saya mungkin salah. Saya mengikuti langkah-langkah dalam kasus kedua di bawah ini, dan berhasil.)
Jika Anda secara eksplisit menentukan nomor simpul (=
nid
) dari setiap baris dalam migrasi Anda, maka itu mudah, karena Anda tahu baris mana yang sesuai dengan yang mananid
, bahkan sebelum Anda mengimpor node tersebut. Jadi, Anda bisa mengaturtnid
setiap baris seperti itu. Jelas, Anda harus berhati-hati untuk tidak bertentangan dengan yang diimpornid
dengan yang adanid
di konten Drupal.Jika Anda membiarkan Drupal memutuskan
nid
setiap baris yang diimpor, maka itu lebih rumit. Saya lakukan dengan 2 langkah. Pertama, saya mengimpor semua baris bahasa sumber, menambahkan bidang khusus untuk mengidentifikasinya sebagai simpul sumber untuk penggunaan nanti. Kedua, saya mengimpor baris-baris bahasa terjemahan dan mengatur semuatid
s dari kedua node sumber dan bahasa terjemahan. Kedua langkah ini dapat menjadi modul yang benar-benar berbeda, tetapi mungkin lebih mudah jika Anda mendefinisikan keduanya sebagai kelas terpisah dalam grup (migrasi) yang sama di varialbe$api
di komputer AndaYour_ModuleName.migrate.inc
.Untuk langkah kedua untuk bahasa terjemahan, saya menulis sebagai berikut. Singkatnya, ia menemukan simpul bahasa sumber dengan query SQL, berdasarkan pada bidang kustom
field_original_html_filename
, yang didefinisikan ketika diimpor.Itu semuanya. Saya tidak terkejut jika ada cara yang lebih mudah atau lebih baik, tetapi itu berhasil bagi saya. Bagaimanapun keuntungan untuk menyiapkan terjemahan selama migrasi adalah Anda selalu dapat mengembalikan. Sebagai referensi seluruh kode migrasi saya (untuk 2 bahasa, dari file HTML statis) tersedia di GitHub:
https://github.com/masasakano/migrate_goo
sumber