Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][Symfony] sfFormExtraPlugin nie działa.
Forum PHP.pl > Forum > PHP > Frameworki
tOm-i
Walczę z tym pluginem od jakiegoś czasu konkretnie z częścią dotyczącą "Autocomplete"
Min, w tym wątku.
W końcu się wkurzyłem i zrobiłem dokładnie tak jak TU.
I też nie działa.
Może po prostu nie mam czegoś w php5 wkompilowane lub inny brak tego typu ?

Dodam, że napeno dobrze linkuje w tej częsci
  1. // apps/frontend/modules/article/templates/_form.php
  2. <?php use_javascript('/sfFormExtraPlugin/js/jquery.autocompleter.js') ?>
  3. <?php use_stylesheet('/sfFormExtraPlugin/css/jquery.autocompleter.css') ?>
  4.  
  5. <!-- ... -->



będę wdzięczy za pomoc.


Whisller
@tOm-i - Ale co dokładnie nie działa? Wywala jakieś błędy JS, czy też PHP?
Bo dla testu odpaliłem ten plugin na kompletnie czystym projekcie (nowo utworzonym) i wszystko działa wyśmienicie z pluginem sfFormExtraPlugin.

Żeby nie było że jestem gołosłowny załączam screena [img=http://img40.imageshack.us/img40/6130/picture4bcv.th.png]

Może w kilku słowach co i jak po kolei zrobiłem.

1. Instalacja pluginu
2. Symfony cc
3. Załączenie jQuery
4. Ustawienie struktury bazy danych (ORM - Propel). Baza Users, z dwoma polami Id oraz Name
5. W metodzie configure() klasy UsersForm $this->widgetSchema['name'] = new sfWidgetFormPropelJQueryAutocompleter(array( 'model' => 'Users', 'url' => $this->getOption('url')));
A reszta wygląda jak z manuala symfony.
Cysiaczek
Ja też nie miałem najmniejszych problemów.
W Twoim listingu nie widzę jQuery, kolejność ładowania JS tez ma jakieś znaczenie.
Zacznij od nowa smile.gif
destroyerr
Jeśli coś nie działa to debuguj, debuguj i jeszcze raz debuguj.

Nie podałeś nam w zasadzie żadnych informacji. Jak już wyżej zostało zauważone, nie wiemy nawet czy dołączyłeś jQuery.
Bawimy się w wróżbiarstwo, więc ok. Moja wróżba: pliki jquery.autocompleter.css i jquery.autocompleter.js nie istnieją w lokalizacji w jakiej powinny. Polecenie symfony plugin:publish-assets powinno pomóc.
tOm-i
  1. symfony init-project test


w Database.yml ustawiłem parametry BD.
nastepnie:

  1. symfony propel:build-all
  2. symfony init-app frontend
  3. symfony propel:generate-module frontend article DemoArticle



dodaje:

CODE
// lib/form/DemoArticleForm.class.php
$this->widgetSchema['author_id']->setOption('renderer_class', 'sfWidgetFormPropelJQueryAutocompleter');
$this->widgetSchema['author_id']->setOption('renderer_options', array(
'model' => 'DemoAuthor',
'url' => $this->getOption('url'),
));

public function executeNew(sfWebRequest $request)
{
$this->form = new DemoArticleForm($article, array('url' => $this->getController()->genUrl('article/ajax')));
}

// apps/frontend/modules/article/actions/actions.class.php
public function executeAjax($request)
{
$this->getResponse()->setContentType('application/json');
$authors = DemoAuthorPeer::retrieveForSelect($request->getParameter('q'), $request->getParameter('limit'));
return $this->renderText(json_encode($authors));
}
class DemoAuthorPeer extends BaseDemoAuthorPeer
{
static public function retrieveForSelect($q, $limit)
{
$criteria = new Criteria();
$criteria->add(DemoAuthorPeer::NAME, '%'.$q.'%', Criteria::LIKE);
$criteria->addAscendingOrderByColumn(DemoAuthorPeer::NAME);
$criteria->setLimit($limit);
$authors = array();
foreach (DemoAuthorPeer::doSelect($criteria) as $author)
{
$authors[$author->getId()] = (string) $author;
}
return $authors;
}
}
// apps/frontend/modules/article/templates/_form.php
<?php use_javascript('/sfFormExtraPlugin/js/jquery.autocompleter.js') ?>
<?php use_stylesheet('/sfFormExtraPlugin/css/jquery.autocompleter.css') ?>

Dostaje błąd:

  1. Notice: Undefined variable: article in /home/sfprojects/test/apps/frontend/modules/article/actions/actions.class.php on line 20


wiec w lini:

  1. $this->form = new DemoArticleForm($article, array('url' => $this->getController()->genUrl('article/ajax')));


daje:

  1. $this->form = new DemoArticleForm(new DemoArticle(), array('url' => $this->getController()->genUrl('article/ajax')));


dostaje blad:
  1. Fatal error: Class 'sfWidgetFormPropelJQueryAutocompleter' not found in /usr/share/php/symfony/widget/sfWidgetFormChoice.class.php on line 126

Bo zapomniełem zainstalować pluginu
wiec:

  1. symfony plugin:install sfFormExtraPlugin


i
  1. symfony cache:clear


nastepnie blad:
  1. 500 | Internal Server Error | RuntimeException
  2. Class "DemoAuthor" must implement a "__toString" method to be rendered in a "sfWidgetFormPropelJQueryAutocompleter" widget

wiec dodaje metody __toString

CODE
class DemoAuthor extends BaseDemoAuthor
{
public function __toString()
{
return $this->getName();
}
}


class DemoCategory extends BaseDemoCategory
{
public function __toString()
{
return $this->getName();
}
}


class DemoTag extends BaseDemoTag
{
public function __toString()
{
return $this->getName();
}
}


w bazie w demo_author dodaje 2 wpisy:
xtest 1
xtest 2


na końcu dałem jeszcze:

  1. symfony plugin:publish-assets



i nadal nie działa


w article/new mam
CODE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link rel="shortcut icon" href="/favicon.ico" />
<script type="text/javascript" src="/sfFormExtraPlugin/js/jquery.autocompleter.js"></script>
<link rel="stylesheet" type="text/css" media="screen" href="/css/main.css" />
<link rel="stylesheet" type="text/css" media="screen" href="/sfFormExtraPlugin/css/jquery.autocompleter.css" />
</head>

<body>
<h1>New Article</h1>


<form action="/article/create" method="post" >
<table>
<tfoot>
<tr>
<td colspan="2">
<input type="hidden" name="demo_article[id]" id="demo_article_id" /> &nbsp;<a href="/article">Cancel</a>

<input type="submit" value="Save" />
</td>
</tr>
</tfoot>
<tbody>
<tr>
<th><label for="demo_article_author_id">Author id</label></th>
<td>

<input type="hidden" name="demo_article[author_id]" id="demo_article_author_id" /><input type="text" name="autocomplete_demo_article[author_id]" value="" id="autocomplete_demo_article_author_id" /><script type="text/javascript">
jQuery(document).ready(function() {
jQuery("#autocomplete_demo_article_author_id")
.autocomplete('/article/ajax', jQuery.extend({}, {
dataType: 'json',
parse: function(data) {
var parsed = [];
for (key in data) {
parsed[parsed.length] = { data: [ data[key], key ], value: data[key], result: data[key] };
}
return parsed;
}
}, { }))
.result(function(event, data) { jQuery("#demo_article_author_id").val(data[1]); });
});
</script> </td>
</tr>
<tr>
<th><label for="demo_article_status">Status</label></th>
<td>

......CUT


article/ajax daje mi plik z danymi z bazy czyli:
  1. {"2":"xtest 1","1":"xtest 2"}


tak to wygląda...
destroyerr
Nie działa - czyli pojawia się input, ale po wpisaniu nic się nie dzieje? Tak na prawdę znowu nie napisałeś co się dzieje i czym objawia się "nie działa".
Może błąd jest gdzieś po strone js, w takim razie skorzystaj z firebug'a i napisz jakie on daje błędy.
tOm-i
Przepraszam ale miedzy czasie edytowałem posta bo problemy z BBCode miałem smile.gif teraz podałem wiecej informacji,
pojawia się normalenie cały formularz tylko samo autocomplete w inpucie nie działa, zaraz sprawdzę przy pomocy tego co mi napisałeś.


EDIT

wreszcie co sie ruszyło smile.gif są błędy co mnie niezmiernie cieszy bo nie maiłem pomysłyu juz jak znaleść jakieś błedy

CODE
jQuery is not defined
jquery.autocompleter.js()jquery.a...pleter.js (wiersz 762)
[Break on this error] })(jQuery);\njquery.a...pleter.js (wiersz 762)
jQuery is not defined
new()new (wiersz 30)
[Break on this error] jQuery(document).ready(function() {\nnew (wiersz 30)


takie błedy mam.
destroyerr
Zapomniałeś już co było we wcześniejszych postach? Przecierz Whisller i Cysiaczek pisali Ci już o załączeniu jQuery. U Ciebie nadal go nie ma! O czym zresztą mówi bardzo dokładnie błąd, który nam podałeś.
tOm-i
To proszę mi powiedzieć co kryje się pod terminem "załączenie jquery" ?
nie to :?

  1. <?php use_stylesheet('/sfFormExtraPlugin/js/jquery.autocompleter.js') ?>


bo juz zgłupiałem.

Dodam, że poprwność dołączenia css sprawdziłe sobie poprzez dodanie w jquery.autocompleter.css wpisu
* {font-size:10px}
czciionka mi sie zmiejszyłe wiec css załadowany.

Rozumiem co "mówi" do mnie błąd tylko nie wiem dlaczego ?

http://test.local/sfFormExtraPlugin/js/jqu...utocompleter.js wyświetla mi skrypt js taką lokalizacjie podaje również firebug wiec moze nie mam "załączonego jquery" :]
destroyerr
Nie, to jest plugin do jQuery, a Tobie brakuje samego jQuery. Mógłbyś przeczytać samemu coś o jQuery to też byś to wiedział.
tOm-i
No się nie domyśliłem ze może brakować w pluginie czegoś czego on sam wymaga.
Teraz już działa dziękuję wszystkim za pomoc.
Mariner
W manualu do pluginu sfFormExtraPlugin w części poświęconej autocomplete:

http://symfony.com/blog/new-in-symfony-1-2-make-your-choice

wkradł się błąd który - jeżeli próbuje się uruchomić ten przykład sposobem kopiuj wklej - powoduje że całość nie działa (a przynajmniej jeżeli korzysta się z sf 1.4 )

we fragmencie :

  1. public function executeEdit($request)
  2. {
  3. // ...
  4.  
  5. $this->form = new DemoArticleForm($article, array('url' => $this->getController()->genUrl('article/ajax')));
  6.  
  7. // ...
  8. }


zamiast "$article" powinno być "$DemoArticle". Czyli :

  1. public function executeEdit($request)
  2. {
  3. // ...
  4.  
  5. $this->form = new DemoArticleForm($DemoArticle, array('url' => $this->getController()->genUrl('article/ajax')));
  6.  
  7. // ...
  8. }
destroyerr
Błędu nie ma, masz u siebie inaczej nazwaną zmienną. Gdybyś artykuł przypisał do zmiennej $article problemu by nie było. To wszystko.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.