Trace: » migracja_i18n
Migracja danych i18n z wersji alpha do pre-beta w cake'u 1.2
UWAGA: To jest tylko zalążek artykułu. Będę bardzo wdzięczny, jeśli pomożesz go dopracować :)
1. Tworzenie kontrolera, modelu i szablonów:
Kod kontrolera (/app/controllers/i18n_migration_controller.php):
<?php
class I18nMigrationController extends AppController
{
function admin_index()
{
}
function admin_update()
{
$this->I18nMigration->update();
}
}
?>
Kod modelu (/app/models/i18n_migration.php):
<?php
class I18nMigration extends AppModel
{
var $name = 'I18nMigration';
var $useTable = false;
var $db=null;
var $__prefix;
function __construct()
{
// change this if you don't use default connection
$dbConnection = 'default';
$this->db =& ConnectionManager::getDataSource($dbConnection);
$this->__prefix = empty($this->db->config['prefix']) ? '' : $this->db->config['prefix'];
}
function update()
{
$rs = $this->query("SELECT * FROM ".$this->__prefix."i18n_content");
$counter = count($rs);
for($i=0;$i<$counter;$i++)
{
$this->execute("UPDATE ".$this->__prefix."i18n SET content='".addslashes($rs[$i][$this->__prefix.'i18n_content']['content'])."' WHERE id='".addslashes($rs[$i][$this->__prefix.'i18n_content']['id'])."' ");
}
}
}
?>
Kod szablonu index(/app/views/i18n_migration/admin_index.ctp):
<h2>Migracja danych i18n z alpha do pre-beta v. 0.1</h2>
<h3><b>UWAGA: W związku z tym, że jest to bardzo wczesna wersja rozwojowa oprogramowania, przed operacją importu, należy wykonać kopie bezpieczeństwa danych z tablic i18n i i18n_content. Autor nie odpowiada za starty wynikłe z działania tego oprogramowania.</b></h3>
<p>Przed wykonaniem migracji danych należy zaktualizować strukturę tabeli i18n według kodu podanego poniżej:<br />
[ZNACZNIK CODE]
CREATE TABLE i18n (<br />
id int(10) NOT NULL auto_increment,<br />
locale varchar(6) NOT NULL,<br />
model varchar(255) NOT NULL,<br />
foreign_key int(10) NOT NULL,<br />
field varchar(255) NOT NULL,<br />
content mediumtext,<br />
PRIMARY KEY (id),<br />
# UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field),<br />
# INDEX I18N_LOCALE_ROW(locale, model, foreign_key),<br />
# INDEX I18N_LOCALE_MODEL(locale, model),<br />
# INDEX I18N_FIELD(model, foreign_key, field),<br />
# INDEX I18N_ROW(model, foreign_key),<br />
INDEX locale (locale),<br />
INDEX model (model),<br />
INDEX row_id (foreign_key),<br />
INDEX field (field)<br />
);<br />
[/ZNACZNIK CODE]
</p>
<b><?php echo $html->link('ROZPOCZNIJ MIGRACJE DANYCH','update',null,'Jesteś pewien? Pamiętaj o utworzeniu kopii bezpieczeństwa danych z tabel i18n i i18n_content!'); ?></b>
Kod szablonu update(/app/views/i18n_migration/admin_update.ctp):
<h2>Migracja danych i18n z alpha do pre-beta v. 0.1</h2>
<p>Migracja danych została zakończona. W związku z tym, że jest to badzo wczesna wersja oprogramowania <b>NALEŻY</b> sprawdzić, czy migracja <b>FAKTYCZNIE</b> zakończyła się powodzeniem.</p>
<b><?php echo $html->link('WRÓĆ','index'); ?></b>
2. Konfiguracja połączenia z bazą danych
Jeśli korzystasz z innego połączenia niż domyślne (default), to w pliku modelu należy zmienić linijkę:
$dbConnection = 'default';
3. Uruchomienie modułu do migracji
Aby uruchomić moduł, należy wejść na pod adres http://twojastrona.com/admin/i18n_migration/index.
4. Przygotowanie bazy danych
Na początku należy wykonać kopie bezpieczeństwa tabel i18n i i18n_content. Następnie według kodu SQL podanego na stronie pod adresem podanym w punkcie 3.
5. Migracja danych
Po wykonaniu powyższych kroków, możesz przystąpić do migracji danych. PAMIĘTAJ: Wszystkie operacje wykonujesz na własne ryzyko!
6. TODO
- sprawdzać, czy jest zmieniona struktura tabeli i18n (jesli potrzeba, to zmienic),
- sprawdzac, czy jest tabela i18n_content (jesli nie ma, to nie trzeba przeprowadzac migracji),
- sprawdzic, czy migracja zostala zakonczona powodzeniem,
- przed migracja zrobic kopie bezpieczenstwa danych z tabel i18n i i18_content,
- wrzucić moduł do repozytorium.