27
cz.
2009
palikowski

aktualizacja drupala z 5 na 6 i moduł image

Jeśli macie drupala 5 i dużą galerię opartą o image to... macie problem,

robiłem kilka testowych upgrade'ów takiego zestawu (drupal5 + najnowsze image 1.x -> drupal 6.x, oczywiście według instrukcji z http://drupal.org/node/3... ) i zawsze kończyło się to niewesoło,

rzecz w tym, że informacje o obrazkach jakie w drupalu 5 mamy w tabeli files są przenoszone do nowej tabeli image... niestety instalator nie potrafi obsłużyć błędu, który powstaje jeśli do docelowej tabeli chcemy zapisać wiersz o zduplikowanym indeksie. W sumie to logiczne, że nie da się takiego wiersza dodać, bo mysql zwróci błąd. Jednak my możemy to zauważyć za późno i potrzebować wybrnąć z tej sytuacji.

Pomoże nam jak zwykle niezawodny drupal.org i jego przepastne zasoby... jeśli zatem mamy drupala 6 i brakuje nam połowę obrazków postępujemy tak:

na starej bazie sprzed aktualizacji (mamy taką bo oczywiście robimy przed aktualizacją backup... prawda?!), odpalamy kwerendę:

CREATE TABLE image ( `nid` INTEGER UNSIGNED NOT NULL, `fid` INTEGER UNSIGNED NOT NULL, `image_size` VARCHAR(32) NOT NULL, PRIMARY KEY (`nid`, `image_size`), INDEX image_fid(`fid`) ) DEFAULT CHARACTER SET utf8

następnie odpalamy kwerendę, w której musimy wpisać używane na naszej stronie nazwy wielkości obrazków, u mnie to były 200na200 i 300na300 oraz standardowe _original, thumbnail i preview:

INSERT INTO image SELECT DISTINCT f.nid, f.fid, f.filename FROM files f INNER JOIN node n ON f.nid = n.nid WHERE n.type='image' AND f.filename IN ('_original', 'thumbnail', 'preview', '200na300', '300na300') GROUP BY nid,filename

na koniec tabelę kopiujemy do bazy z nowym drupalem - odpowiednią opcję znajdziemy w phpmyadmin,

voila! nasze galerie w drupalu 6 powinny być uratowane