![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 12 Dołączył: 11.01.2005 Skąd: Zduńska Wola Ostrzeżenie: (0%) ![]() ![]() |
Witam. Przepraszam za być może zbyt ogólny tytuł, ale nawet nie wiem, jak inaczej miałem nazwać ten wątek.
Mam następujący problem. Podążam sobie za screencastem o generowaniu panelu administracyjnego, z tym, że podstawiam własne dane itp. Jednak natknąłem się na problem, mam sobie (no właśnie, co? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) w każdym razie wchodzę tam poprzez adres kivi/backend_dev.php/photo/list). W tabeli photo mam kolumnę author_id, która powiązana jest z kolumną id z tabeli author. Chciałbym teraz, aby przy wyświetlaniu listy zdjęć (photo/list) zamiast ID autora, była wyświetlana wartość kolumny name. Podążając więc za screencastem utworzyłem w modelu Author metodę __toString(){return $this -> getName(); }, następnie w generator.yml dodałem do display "%%author%%". Wynikiem moich kombinacji jest niezbyt uroczy komunikat o błędzie: Fatal error: Call to undefined method Photo::getAuthor() in C:\xampp\htdocs\kivi\cache\backend\dev\modules\autoPhoto\templates\_list_td_stacked.php on line 5 Jako, że może się przydać, dołączę również definicje obydwu tabel z schema.xml: Kod <table name="photo"> <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" /> <column name="title" type="varchar" size="32" /> <column name="description" type="longvarchar" /> <column name="author_id" type="integer" /> <foregin-key foreginTable="author"> <reference local="author_id" foregin="id" /> </foregin-key> <column name="category_id" type="integer" /> <foregin-key foreginTable="category"> <reference local="category_id" foregin="id" /> </foregin-key> <column name="position" type="integer" /> </table> <table name="author"> <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" /> <column name="name" type="varchar" size="16" /> <column name="login" type="varchar" size="16" /> <column name="password" type="varchar" size="40" /> <column name="watermark" type="varchar" size="32" /> </table> oraz zawartośc pliku generator.yml: Kod generator: class: sfPropelAdminGenerator param: model_class: Photo theme: default fields: title: { name: "Tytuł" } description: { name: "Opis" } author_id: { name: "Autor zdjęcia" } category_id: { name: "Kategoria" } position: { name: "Pozycja" } list: title: Zdjęcia display: [title,category_id,author_id,position] layout: stacked params: %%=title%%<br /><em>w %%category_id%% przez %%author%% na pozycji %%position%%</em> Szukałem co nieco na ten temat w sieci, jednak mnie nie udało się niczego znaleźć, proszę więc o pomoc Szanownych Kolegów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pozdrawiam, Virti. Ten post edytował Virti 8.08.2008, 21:55:37 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 12 Dołączył: 11.01.2005 Skąd: Zduńska Wola Ostrzeżenie: (0%) ![]() ![]() |
Cytat Podążając więc za screencastem utworzyłem w modelu Author metodę __toString(){return $this -> getName(); } Metodę utworzyłem, oto kod:
plik lib/model/Author.php Zapomniałem dodać, korzystam z Symfony 1.1 EDIT: dodam również, że ja w przeciwieństwie do Pana prowadzącego screencast przy dodawaniu zdjęć nie mogę wybrać sobie autora (muszę wpisywać ID). Więc... POMOCY (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pozdrawiam, Virti Ten post edytował Virti 9.08.2008, 13:28:54 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
w tym przypadku musisz skorzystać z partiala, nie wiem czemu ale w akcji "list" metoda __toString nie daje tego efektu, co w akcji "edit/create"...
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 12 Dołączył: 11.01.2005 Skąd: Zduńska Wola Ostrzeżenie: (0%) ![]() ![]() |
Mógłbyś jakoś uściślić swoją wypowiedź? Jestem początkującym użytkownikiem Symfony, tworzę teraz swój pierwszy projekt. Czym są partiale? Oraz jak włączyć te select listy w create/edit, tak by przy tworzeniu bądź edycji zdjęć możabyło wybrać autora, kategorię?
Pozdrawiam, Virti EDIT: Ok, doczytałem w dokumentacji symfony czym są te partiale. Jeśli dobrze zrozumiałem, są to powtarzalne kawałki kodu. Mam więc pytanie, jak dołączyć partiala to listy w adminie, jeżeli jest ona generowana automatycznie, z pliku generator.yml? Ten post edytował Virti 10.08.2008, 11:30:37 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Załóżmy że tworzysz moduł do modelu News w admin generator. Aby w akcji list wyświetliła Ci się nazwa autora, a nie jego id musisz stworzyć partial który będzie wyświetlał tą nazwę. Przykładowo tak to będzie wyglądać (nazwa pliku np. _authorname.php):
W pliku generator.yml robisz tak:
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 12 Dołączył: 11.01.2005 Skąd: Zduńska Wola Ostrzeżenie: (0%) ![]() ![]() |
Problem w tym, że "$photo -> getAuthorId()" ani "$photo -> getAuthor()" nie zwracają obiektu, w wyniku czego dostaję błąd:
Kod Fatal error: Call to a member function getName() on a non-object in C:\xampp\htdocs\kivi\apps\backend\modules\photo\templates\_author.php on line 2 Wychodzi na to, że będę musiał pobierać dane na podstawie otrzymanego ID... chyba, że jest jeszcze jakieś wyjście (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Jak tak, to będę wdzięczny za oświecenie mnie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) I jeszcze pozostaje kwestia SELECTów w edit/create z nazwami autorów / kategorii. EDIT: Zrobiłem tego partiala, pobierając dane o autorze ręcznie:
i wszystko jest ok, męczą mnie jednak te selecty, bo nie ukrywajmy, ale trudno jest dodać zdjęcie do kategorii po ID (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) EDIT2: Mógłby mnie ktoś przy okazji oświecić, jak pobrać z bazy tylko jedno pole, np nazwę zamiast nazwy, opisu itd.? Z góry klikam "pomógł" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) EDIT3 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Co do tych selectów, wyszukałem w dokumentacji klasę sfWidgetFormPropelSelect. Niestety jakoś niespecjalnie mi ona pomogła (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) dodałem ją zamiast sfWidgetFormInput, jednak żadne zmiany nie zaszły. Po symfony cc również. Pozdrawiam, Virti Ten post edytował Virti 11.08.2008, 12:31:09 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Problem w tym, że "$photo -> getAuthorId" ani "$photo -> getAuthor" nie zwracają obiektu, w wyniku czego dostaję błąd: Daj mi tępą łyżkę, a się potnę.... Nie $photo->getAuthorId, tylko $photo->getAuthorId(). Nie $photo->getAuthor, tylko $photo->getAuthor()... Edit: W partialu nie powineneś mieć żadnej logiki, jeśli chcesz logikę to do tego służy component. Ten post edytował -=Peter=- 11.08.2008, 12:06:11 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 12 Dołączył: 11.01.2005 Skąd: Zduńska Wola Ostrzeżenie: (0%) ![]() ![]() |
Wpadłem na to, że to są metody. W poprzednim poście nie dodałem nawiasów przez nieuwagę.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jedyne co mi do głowy przychodzi, to w jakimś zdjęciu nie masz podanego autora (wystarczy jeden taki rekord), więc obiekt nie jest zwracany. Nie masz pola author_id w tabeli photo ustawionego jako wymagane, więc być może w tym leży problem.
Sprawdź jeszcze czy masz metodę getAuthor() w klasie BasePhoto, jeśli nie to spróbuj wygenerować jeszcze raz model, ponieważ może przez nieuwagę generowałeś model gdy nie miałeś ostatecznej wersji pliku ze strukturą bazy danych. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 12 Dołączył: 11.01.2005 Skąd: Zduńska Wola Ostrzeżenie: (0%) ![]() ![]() |
Metody getAuthor() w BasePhoto nie mam. Model generowałem na 100% z tego, co jest w pierwszym poście (tzn z tym fragmentem). ID autora również jest podane przy wszystkich zdjęciach.
Model mozna przebudować bez większych problemów jeszcze raz? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Rozumiem, że w konsoli będę musiał wpisać to samo co wcześniej, czyli "symfony propel-build-model"? Pozdrawiam, Virti |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
tak, możesz bez większych problemów przebudować model, i to zrób bo w klasie BasePhoto, jeśli author_id jest ustawione jako klucz obcy, musi być ta metoda.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 12 Dołączył: 11.01.2005 Skąd: Zduńska Wola Ostrzeżenie: (0%) ![]() ![]() |
EDITED
ehh... fujara ze mnie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) literówka w schema.xml :/ Wygenerowałem model tym razem metoda getAuthor() jest, problem w tym, że list jak nie było tak nie ma. Robiłem symfony cc, generowałem jeszcze raz formularze (symfony propel:build-forms) i nic. Mógłbyś mi coś doradzić, jak się teraz to tych list uśmiechnąć, tak by się pojawiły? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) EDIT: Ok, rozwiązane. W sumie nie wiem dlaczego po pierwszym symfony cc nie ruszyło. Ale wazne, że teraz śmiga. Dzięki wielkie za pomoc i okazaną cierpliwość (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Pozdrawiam, Virti Ten post edytował Virti 13.08.2008, 13:42:22 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 17:20 |