PDA

Zobacz pełną wersję : Tworzenie tabeli w bazie podczas instalacji własnego modułu



kfinto
16-12-2010, 18:11
Witam.
Tworzę własny moduł.
Próbowałem utworzyć tabelę w bazie MySQL podczas instalacji modułu. Postąpiłem w sposób podany w tym oto kursie.http://www.wromanek.info/artykuly/16-kurs-pisania-komponentow-dla-joomla-15-mvc/54-lekcja-8-tworzymy-paczk-instalacyjn.html (jeżeli chodzi o plik .xml). Moduł instaluje się poprawnie, jednak tabela nie tworzy się. Nawet oryginalny skopiowany i wklejony do pliku .xml kod od <install> do </uninstall> nie tworzy u mnie tabeli.
Tak samo nie mogę jej utworzyć poprzez setQuery(). Zapytania SELECT działają, ale CREATE nie.
Tabela tworzy się jednak, jeżeli użyję zwykłego mysql bez korzystania z funkcji joomla.

Czy problemem jest to, że może poprzez moduł nie da się utworzyć tabeli, a jest to możliwe tylko w komponencie?
Czy powinienem podać jeszcze jakieś informacje?

moje
16-12-2010, 21:43
Ja sam napisałem odpowiedz na to, w inny temacie, który jest na forum - wystarczyło poszukać.

EDIT:

Hej Robster, nie obraź się ale nie pamiętałem w czyim temacie to było - ten czas tak leci.

Robster
16-12-2010, 21:55
Dokładnie i to bodajże była odpowiedź na moje pytanie, więc masz już 2 poszlaki :)

//Cześć @moje :)

kfinto
17-12-2010, 22:56
Domyślam się, że chodzi o ten temat: http://forum.joomla.pl/showthread.php?43575-Modu%C5%82y-tworzenie-tabel-w-bazie&highlight= .
Natknąłem się na niego już wcześniej, ale przedstawione w nim rozwiązanie wydało się dla mnie na pierwszy rzut oka słabo zrozumiałe i trochę kombinowane. Następnie znalazłem tamten kurs i próbowałem coś zdziałać wg niego.
Jeżeli chodzi o ten plik, to tworzenie tabeli powinno odbywać się w nim przez funkcje joomli czy zwykłe mysql? Jeżeli przez funkcje joomli, to tak jak pisałem, CREATE mi w nich nie działało, a jeżeli przez zwykły, to czy nie będzie jakichś problemów z uprawnieniami (bo taką sugestię dostałem)?

moje
17-12-2010, 23:36
Żeby CREATE zadziałało musisz mieć połączenie z bazą danych inaczej nic to nie da.

Robster
18-12-2010, 10:06
Wypożyczyłem ostatnio fajną książkę "Joomla! Profesjonalne tworzenie stron WWW" pana Dana Rahmela. Fajnie jest tam przedstawiona kwestia tworzenia modułów i szablonów. Sam nie wiem dlaczego ale przepisałem ci kawałek :)

W pliku .xml dajesz coś takiego:


<install>
<sql>
<file driver="mysql" charset="utf8">install.sql</file>
</sql>
</install>
<uninstall>
<sql>
<file driver="mysql" charset="utf8">uninstall.sql</file>
</sql>
</uninstall>

Oczywiście pamiętając o zadeklarowaniu odpowiednich plików:

<filename>install.sql</filename>
<filename>uninstall.sql </filename>

Do pliku install.sql dajesz:

CREATE TABLE IF NOT EXISTS '#_guestbook'
('id' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
'message' text NOT NULL, 'created_by' INTEGER UNSIGNED NOT NULL,
'location' VARCHAR(45), 'created' TIMESTAMP NOT NULL,
'userip' VARCHAR(16), PRIMARY KEY('id'))

A w pliku uninstall.sql:

DROP TABLE IF EXISTS '#_guestbook'

U mnie wszystko ładnie działa.

Pozdrawiam

EkleErs
23-12-2010, 14:57
@Robster
U mnie nie dziala chyba ze w com_... a mowa chyba o modułach
Mozesz sprawdzic czy cos magicznego zapomiales dopisac?
a moze oszukuja w tej ksiazce

Robster
23-12-2010, 15:06
@EkleErs możliwe, bo to jest fragment z działu o komponentach, ale ja go wstawiałem do swojego modułu i działał. Zaraz napisze coś prostego i zobaczę co z tego wyjdzie.

---------------------------
@EkleErs zabij mnie, ale nie mogę tego odtworzyć :/ Miałem to wcześniej na dysku, ale padł i nie mogłem tego odzyskać. Teraz próbowałem ponownie to zrobić i kiszka :/ Nawet tworząc baze w pliku php nie chce się ona zapisać, więc pewnie popełniam ten sam błąd. Jak znajdę chwilę czasu w weekend (paradoks świąt), to spróbuję to zrobić.

EkleErs
24-12-2010, 02:34
Ok nie spiesz sie. Merry Christmas.