FORM addError zobrazit prez AJAX

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
vosy
Člen | 532
+
0
-

ahoj mam formular a chtel bych aby mi vracel chybovae hlasky prez ajax
v JS mam:

$("form.ajax").on('click', "#frmnewForm-ulozit", function (payload)
    {
        // cl(payload);
        $(this).ajaxSubmit(payload);

        return false;
    });

kdyz mam ve formulari

$form->addText('nazev', 'Název:')
                ->setRequired('Zadejte název značky.');

a znacku nezadam tak se spravne zobrazi ALERT okno s uvedenou hlaskou.

problem mam kdyz znacku vyplnim a chci zkontrolovat jestli znacka jiz neni v dtb.

public function defaultFormUlozit(MyForm  $form)
{
    $vals = $form->values;
    $presenter = $form->getPresenter();

	if(.....)
	{
		$form->addError('Znacka jiz existuje.');

tak se mi tato hlaska jiz nevrati ajaxem do ALERTmessage

jak??????

honos
Člen | 109
+
0
-

Třeba ti pomůže toto Zkus hledat…

akadlec
Člen | 1326
+
0
-

Tak alert ti to v žádném případě nevrátí v tomto tvaru jak si uvedl. Buď to uděláš tak že si invaliduješ snippety s políčky formuláře a při chybě tam vykreslíš informaci a nebo si upravíš posílání FlashMessages či zpráv z formu aby se ti vložili do payloadu samostatně a v JS si je pak zpracuješ.

Příklad:
úprava posílání FM v presenteru:

abstract class BasePresenter extends \IPub\Application\UI\Presenter
{
	/**
	 * Global before rendering actions
	 */
	protected function beforeRender()
	{
		parent::beforeRender();

		// Get all flash messages and put them into array
		$messages = array();

		// Get all flash messages & put them into output array
		foreach ($this->getTemplate()->flashes as $flash) {
			$messages[] = array(
				'type' => $flash->type,
				'text' => $flash->message
			);
		}

		// For ajax request...
		if ( $this->isAjax() ) {
			// ...store messages in payload
			$this->payload->messages = $messages;
		}
		//...
	}
}

zpracování v JS s pomocí nette.ajax.js a zobrazení pomocí pnotify:

	/**
	 * Flash messages
	 */
	$.nette.ext('flashMessages', {
		// Init system messages
		init: function() {
			// Disable messages history
			$.pnotify.defaults.history = false;
		},
		// When request is done ...
		success: function (payload) {
			// ... show messages if are set
			if ( payload.messages ) {
				this.show(payload.messages);
			}
		}
	},{
		// Show messages from array
		show: function(messages) {
			// Display messages in growl
			for(i in messages) {
				// Get message type
				switch (messages[i].type) {
					// Notification
					case 'note':
					case 'information':
						$.pnotify({
							title	: _TT["MSG_BOX_INFORMATIONS"],
							text	: messages[i].text,
							type	: "info",
							styling	: "bootstrap"
						});
						break;
					// Error
					case 'error':
						$.pnotify({
							title	: _TT["MSG_BOX_ERROR"],
							text	: messages[i].text,
							type	: "error",
							styling	: "bootstrap"
						});
						break;
					// Warning
					case 'warning':
						$.pnotify({
							title	: _TT["MSG_BOX_WARNING"],
							text	: messages[i].text,
							type	: "notice",
							styling	: "bootstrap"
						});
						break;
					// Successful
					case 'success':
						$.pnotify({
							title	: _TT["MSG_BOX_OK"],
							text	: messages[i].text,
							type	: "success",
							styling	: "bootstrap"
						});
						break;
				}
			}
		}
	});
honos
Člen | 109
+
0
-

Nemělo by to řešit Nette samo, automaticky..?

Jinak:

akadlec napsal(a):

zpracování v JS s pomocí nette.ajax.js a zobrazení pomocí pnotify:

pnotify je asi plugin?

akadlec
Člen | 1326
+
0
-

@honos: ano je to plugin, ale je jedno co tam použiješ, klidně alert okno. Co sem tak okoukal tak se FM řeší vykreslením do snippetu a pak se invaliduje, proto jsem si to upravil tak abych ty zprávy dostal v poli včetně typu.

honos
Člen | 109
+
0
-

@akadlec Logicky :)