Skocz do zawartości

Witamy na polskim forum Contao
Zarejestruj się teraz, aby skorzystać ze wszystkich funkcji forum. Kiedy się zalogujesz, będziesz mógł tworzyć tematy, pisać posty, rozdawać punkty reputacji, korzystać z prywatnych wiadomości i zarządzać swoim profilem. Jeśli posiadasz już konto, zaloguj się - w przeciwnym wypadku zarejestruj się już teraz!
Zdjęcie

Na co zwrócić uwagę przy tworzeniu modułu.


  • Zaloguj się, aby dodać odpowiedź
11 odpowiedzi w tym temacie

#1
Muszyk

Muszyk

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 52 postów
Witam,
zabrałem się za tworzenie swojego pierwszego modułu. Używam najnowszej wersji contao czyli 3.1.3 i próbuje stworzyć moduł według tutorialu z CDCollection. Niestety juz na początkowym etapie widać, że trochę sie pozmieniało i definicję bazy danych nie umieszcza sie w pliku database.sql (mylę się?) tylko w pliku tl_cds.php (dla tego przykladu).
Ale pojawaja sie schody, po utworzeniu modułu nie tworzy się aytoamtycznie tabela tl_cds, a w menu panelu administratora nie widać nic poza jedną pozycją: cd_collection w menu Content.
Po ręcznym dodaniu tabeli dodatkowo pojawia się możliwość dodawania rekordów dla modułu ale nadal nie widać reszty menu, jest tylko Content->cd_colletion

1. Co zrobić aby tabele modułu automatycznie dodawały sie do bazy
2. Co może być przyczyna problemow z menu?
  • 0

#2
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Przenoszę temat do odpowiedniego działu. Niestety artykuł na Contao.pl jest nieaktualny. Jedyny aktualny tutorial jest po angielsku i znajduje się na moim blogu http://blog.qzminski...the-basics.html
  • 0

Codefog - Contao web development


#3
Muszyk

Muszyk

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 52 postów
Kamil, dziękuję ci bardzo, bardzo mi pomógł ten tutorial, teraz zrozumiałem jak się tworzy moduły.

Mam jednak problem, chciałbym stworzyć moduł, który będzie działał trochę tak jak custom menu. Na każdej podstronie chcę na dole umieszczać 2,3 boxy z obrazkem i krótką treścią, tytułem i być może z opisem prowadzące do ręcznie wybranych podstron serwisu. a każdej podstronie te boxy mogą być różne. Z custom menu nie byłoby problemu, utworzyłbym moduł custom menu dla każdej podstrony i ręcznie bym wybrał cel.
Zacząłem tworzyć własny moduł, opis, obrazek to nie problem, utknąłem na etapie wyboru podstrony. W custom menu jest przycisk Change selection, gdzie za pomocą chceckboxów mozna wybrać podstrony, w moim przypadku lepsze by było wybieranie za pomocą radio jak przy Quick navigation.
Przejrzałem manual w części dotyczący DCA ale nie udało mi się znaleźć żadnej wskazówki jak utworzyć taki przycisk z wyborem podstron serwisu. Może masz jakąś sugestie jak się do tego zabrać?
  • 0

#4
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Spróbuj tak:

$GLOBALS['TL_DCA']['tl_module']['fields']['moje_strony'] = array
(
'label'                   => &$GLOBALS['TL_LANG']['tl_module']['moje_strony'],
'exclude'                 => true,
'inputType'               => 'fileTree',
'eval'                    => array('fieldType'=>'radio', tl_class'=>'clr'),
'sql'                     => "int(10) unsigned NOT NULL default '0'"
);

  • 0

Codefog - Contao web development


#5
Muszyk

Muszyk

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 52 postów
Dzięki, zadziałało.
Coraz lepiej się czuję w tym Contao ale nie jest łatwo :)

Do pełni szczęścia pozostało mi jeszcze jedno. W tym momencie utworzyłem moduł podobny do cd_collection. Aby wstawić linki na stronę muszę utworzyć moduł w Themes i następnie dodać go do strony, co jest 1) niewygodne 2) wyświetlają mi się wszystkie utworzone wpisy.
Ideałem byłoby uzyskać efekt podobny do dodawania formularza czyli w module tworzę nową pozycję i w artykule mogę konkretna pozycję dodać tak aby tylko ona jedna się pojawiała.

To drugie pewnie jest do rozwiązania w moim odpowiedniku ModuleCdList.php, kwestia tylko uzyskania id artykułu.
Pewnie problem nie jest prosty ale może jakaś podpowiedź, w którym iść kierunku.
  • 0

#6
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Z tego co rozumiem to potrzebujesz nowego elementu treści (content element). Krótka instrukcja jak taki utworzyć:
1. Utworzyć nowy plik /elements/ContentWlasny.php na bazie /system/modules/core/elements/ContentHtml.php (+ ewentualnie plik szablonu).
2. Zarejestrować go w config.php (zmienna $GLOBALS['TL_CTE']) i autoload.php.
3. Dodać nowe pole (do wyboru konkretnej pozycji) i paletę (tego elementu) do tl_content.
4. W pliku ContentWlasny.php pobrać wybraną pozycję z bazy, przetworzyć i przypisać do templatki.

Jeżeli czegoś nie będziesz wiedział to patrz w kod źródłowy, bo to najlepsze źródło nauki ;) A jak to nie pomoże to pytaj tutaj śmiało!
  • 0

Codefog - Contao web development


#7
Muszyk

Muszyk

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 52 postów
Jakie to proste :)
Ale żeby nie było, że poszło gładko.
Gdzie dokładnie utworzyć /elements/ContentWlasny.php? i całą resztę? W katalogu głównym? W tym momencie wszystko zrobiłem w core ale to chyba zły pomysł.
  • 0

#8
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Ojoj, w katalogu własnego modułu (system/modules/moj_modul)!
  • 0

Codefog - Contao web development


#9
Muszyk

Muszyk

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 52 postów
Tak myślałem i tak na początku zacząłem robić, ale coś musiałem skopać bo przy dodawaniu artykułu mój nowy element był jedynym typem elementu do wyboru na liście.
Spróbuję jeszcze raz.
  • 0

#10
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Prawdopodobnie podmieniłeś całą tablicę TL_CTE zamiast dodać element :)

// zle
$GLOBALS['TL_CTE'] = array('moj_element'=>'MojElement');
 
// dobrze
$GLOBALS['TL_CTE']['miscellaneous']['moj_element'] = 'MojElement';

  • 0

Codefog - Contao web development


#11
Muszyk

Muszyk

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 52 postów
Tak właśnie się stało :)
Udało mi się oczywiście stworzyć nowy element treści. Udało mi się tez znaleźć opcję Użyj istniejącego elementu treści aby wstawiać go na inne podstrony bez potrzeby ponownego definiowania.

Ale do pełni szczęścia potrzebuję aby zdefiniować go w inny sposób, o którym pisałem wcześniej, coś jak formularz.
Opisując to na przykładzie modułu z twojego bloga. Tworzysz tam kolejne albumy, ale wstawiając moduł na stronę otrzymujesz listę wszystkich albumów. Jak zrobić aby w momencie dodawania ich do strony była możliwość wybrania jednego konkretnego spośród nich?
  • 0

#12
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Musisz dodać nowe pole do tl_content, w którym będziesz wybierać wybrany rekord.

$GLOBALS['TL_DCA']['tl_content']['palettes']['moj_element'] = '{type_legend},type,headline;{protected_legend:hide},protected;{text_legend},moje_pole;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop';
 
$GLOBALS['TL_DCA']['tl_content']['fields']['moje_pole'] = array
(
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['moje_pole'],
'exclude'                 => true,
'inputType'               => 'select',
'foreignKey'              => 'tl_tabela.tytul',
'eval'                    => array('chosen'=>true, 'tl_class'=>'w50'),
'sql'                     => "int(10) unsigned NOT NULL default '0'"
);

A potem w elemencie pobierasz wybrany rekord $this->moje_pole.
  • 0

Codefog - Contao web development





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych użytkowników