![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 2 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Napotkałem problem z dodaniem do formularza typu select wartości z bazy danych i nie bardzo chcą się one wyświetlać. W kontrolerze w akcji daję:
Do formularza przekazuję tablice asocjacyjną o nazwie $categories. Mam problem jednak w użyciu tej zmiennej w opcji addMultiOptions. Przyjmuje ona właśnie tablicę asocjacyjną, ale nijak nie wiem jak jej tam użyć. Jeden Pan podpowiadał mi coś z konstruktorem, ale nie wiem jak tego użyć. Mój formularz:
Byłbym bardzo wdzięczny za jakąkolwiek pomoc. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Uważam, że powinieneś w klasie formularza zrobić pole prywatne $tablica, a potem za pomocą konstruktora przekazać tą tablicę do zmiennej prywatnej i wtedy w klasie możesz do niej się odwołać.
A konstruktor wtedy:
Albo spróbuj napisać funkcję init jako: init($categories) i wtedy się odwołać do $categories w formularzu. Ten post edytował IceManSpy 27.09.2011, 17:47:21 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 2 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedź. Drugie rozwiązanie, które przedstawiłeś próbowałem wcześniej, wyświetla błąd o nieprawidłowym argumencie.
Odnośnie pierwszego sposobu to nie wywołuje w widoku echo $this->form. Wynika z tego , że nie wywołuje funkcji init(), gdzie znajduje się cały spis formularzy, próbowałem dodać parent::init() w konstruktorze; , ale to samo. Sprawdziłem pod koniec konstruktora, czy w ogóle pobrało wartość z kontrolera, pobrało:) Teraz zostało tylko wywołać funkcję init(), ale pytanie brzmi w jaki sposób? Dlaczego nie wywołuje tej funkcji po dodaniu konstruktora? Będę wdzięczny za rozwiązanie problemu. Bardzo potrzebne jest mi połączenie bazy danych z formularzem do zarządzania treścią w panelu administracyjnym. Czy przypadkiem nie robi się też tego w dekoratorach? Ten post edytował CzarnyGsm 27.09.2011, 19:47:08 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 6 Dołączył: 19.12.2010 Skąd: Krzyżanowice Ostrzeżenie: (0%) ![]() ![]() |
Ja używam własnych klas które rozszerzają Zend_Form_Element_Multiselect
i tam: $this->setMultiOptions(jakaś_tablica); tak, że niepotrzebnie chyba dajesz to array() w argumencie. A konstruktora do form używaśz normalnie - piszesz swojego z 2 argumentami, coś na kształt public function __construct($options = null, $tablica=null) { parent::__construct($options); $this->tablica=$tablica; } Ten post edytował Janusz1200 27.09.2011, 20:34:51 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 2 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie podziękowanie dla Batmana .
Rozwiązanie problemu: - w konstruktorze
- w formularzu
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 65 Pomógł: 2 Dołączył: 5.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Możesz również zrobić coś takiego :
<?php class Form_Form extends Zend_Form { public $zmienna1, $zmienna2; public function cos tam($zmienna1, $zmienna2) { $this->zmienna1 = $zmienna2; $this->zmienna2 = $zmienna2; } public function createForm() { $this->setName('nazwa'); itd... Na początku prześlesz sobie cokolwiek tam chcesz w jakiejkolwiek formie do funkcji cos , następnie jak już wszystko powrzucasz wywołasz funkcje createForm. Z tym sposobem z konstruktorem miałem wiele problemów, w tym również zapychanie całkowitej ilości pamięci (memory_limit). |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 23.06.2025 - 13:37 |