Flash message

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
radvis
Začátečník | 110
+
0
-

Ahoj,

mám flashové zprávy a chtel bych, aby měli odlišné barvy např. při odeslání komentáře bude zprava modrá a při selhání červená. Neví někdo jak nato? Díky.

jasir
Člen | 746
+
0
-

Můžeš použít druhý parametr metody flashMessage – type :

<?php
    $this->flashMessage('Nastala chyba','error');
?>

A v šabloně můžeš mít:

<div n:if="count($flashes)>0" id="flashmessages">
	<div n:foreach="$flashes as $flash"
	     class='flashmessage {$flash->type}'>{$flash->message}
	</div>
</div>
radvis
Začátečník | 110
+
0
-

S nette začínam, nemohl by jsi to prosím víc popsat? Především to v šabloně (myslím tím n:if a pod)? Díky.

Editoval radvis (31. 8. 2009 16:41)

Ondřej Brejla
Člen | 746
+
0
-

Jinak napsáno:

{if count($flashes) > 0}
<div id="flashmessages">
        {foreach $flashes as $flash}
        <div class='flashmessage {$flash->type}'>
                {$flash->message}
        </div>
        {/foreach}
</div>
{/if}

Editoval Warden (31. 8. 2009 16:42)

radvis
Začátečník | 110
+
0
-

Díky, už mi to funguje, ale když to chci udělat jak napsal „jasir“ tj:

<div n:if="count($flashes)>0" id="flashovaZprava">
  <div n:foreach="$flashes as $flash" class='flashovaZprava{$flash->type}'>
    {$flash->message}
  </div>
</div>

tak mi to hodí chyby:
Notice: Undefined variable: flash in C:\wamp\www\neco.cz\app\temp\cache-Nette.Template%00d056c91dc0015cce7911f5c90b2c76371.%40layout.phtml.php on line 109“ a
Notice: Trying to get property of non-object in C:\wamp\www\ukaztalent.cz\app\temp\cache-Nette.Template%00d056c91dc0015cce7911f5c90b2c76371.%40layout.phtml.php on line 109
neví prosím někdo čím to je?

Editoval radvis (31. 8. 2009 20:12)

jasir
Člen | 746
+
0
-

Zkus použít nejnovější revizi nette, chybu tam nevidím a dělal jsem copy/paste z webu, kde to funguje. Ještě se podívej do té vygenerované šablony jaký kód to vlastně vytvořilo. Pokud budeš upgradovat Nette, nezapomeň po upgrade vymazat temp.

radvis
Začátečník | 110
+
0
-

Vygeneruje to tohle: „<?php echo TemplateHelpers::escapeHtml($flash->message) ?>
ja bohužel nevím jak změnit verzi. Nevíš o nějakém tutoriálu?

Editoval radvis (31. 8. 2009 20:44)

jasir
Člen | 746
+
0
-

radvis napsal(a):

Vygeneruje to tohle: „<?php echo TemplateHelpers::escapeHtml($flash->message) ?>

Jasně, ale to celé je v nějakém foreach-i, tak sem zkus plácnout celé (ten foreach. ;-)

radvis
Začátečník | 110
+
0
-

Jak udělám upgrade? Bohužel v s nette nemám moc zkušeností.

<div n:if="count($flashes)>0" id="flashovaZprava">
  <div n:foreach="$flashes as $flash" class='flashovaZprava<?php echo TemplateHelpers::escapeHtml($flash->type) ?>'>
    <?php echo TemplateHelpers::escapeHtml($flash->message) ?>

  </div>
</div>

<?php echo $template->subTemplate($content)->__toString(TRUE) ?>
jasir
Člen | 746
+
0
-

Teď je to jasné, máš starou verzi, která „n:“ syntax neumožňuje – jak vidíš, nepřekompilovalo se to do php kódu. Takže si ji stáhni z sekce download – Nightly build je nejnovější vývojová verze, nebo můžeš zkusit tu doporučovanou, ale nejsem si jistý, jak vlastně vzniká, sám používám stále tu nejnovější.

A nebo počkej, až David překlopí oficiálně novou verzi a používej standartní { } syntax.

radvis
Začátečník | 110
+
0
-

A jak to mám správně změnit? Není na to nějaký tut?:-X Jak jsem už psal s nette nemám zkušenosti:(.

jasir
Člen | 746
+
0
-

Teď ti nerozumím, prostě si stáhni tu verzi kterou chceš a přeplácni svojí stávající instalaci Nette tou novou. A pak smaž obsah adresáře app/temp.

redhead
Člen | 1313
+
0
-

jééjej, prostě prostě ty složky s distribucema Nette stačí přepsat?

jediný na co musíš myslet je smazat obsah složky app/temp (zvlášť ve tvém případě se šablonama)

(jasir byl rychlejší)

Editoval redhead (31. 8. 2009 21:29)

radvis
Začátečník | 110
+
0
-

Vše jsem udělal a hází mi to chybu:

"**Warning: Unexpected character in input: ‚\‘ (ASCII=92) state=1 in C:\wamp\www\neco.cz – Kopie\libs\Nette\loader.php on line 23

Parse error: syntax error, unexpected T_STRING in C:\wamp\www\neco.cz – Kopie\libs\Nette\loader.php on line 23**"

jasir
Člen | 746
+
0
-

Můj tip – asi jsi stáhnul verzi pro php 5.3 zatímco používáš 5.2.x.

Edit: Btw podíval jsi se co je na té inkriminované řádce?

Editoval jasir (31. 8. 2009 21:53)

radvis
Začátečník | 110
+
0
-

Teď už to hazi jen chybu s bootstrapem
Fatal error: Class ‚RobotLoader‘ not found in C:\wamp\www\neco.cz – Kopie\app\bootstrap.php on line 8

řádek8: $loader = new RobotLoader();

jasir
Člen | 746
+
0
-

Hm. Plácni sem ten bootstrap. Asi neinkluduješ loader.php

radvis
Začátečník | 110
+
0
-

pošlu ti jen vrchní část mám tam toho celkem dost;)

require_once LIBS_DIR . '/Nette/loader.php';

//Autoload
$loader = new RobotLoader();
$loader->addDirectory(APP_DIR);
$loader->addDirectory(LIBS_DIR);
$loader->register();

//Config load
Environment::loadConfig();

//Autentizace
require_once APP_DIR . '/models/Authenticator.php';
jasir
Člen | 746
+
0
-

Nevím. Zkus to odkrokovat. Bude to nějaká blbost.

Jo, ještě mě napadlo, zkus si hodit do config.ini (sekce common)

Edit: timhle to nebude, tak se na to vyprdni.

service.Nette-Loaders-RobotLoader.run = TRUE

a bootstrap.php

require LIBS_DIR . '/Nette/loader.php';

// Step 2: Configure environment
// 2a) enable Nette\Debug for better exception and error visualisation
Debug::enable();
Debug::$strictMode = TRUE;
Debug::enableProfiler();

// 2b) load configuration from config.ini file

//Environment::setMode(Environment::PRODUCTION);
Environment::loadConfig();

RobotLoader by se měl natáhnout sám.

Editoval jasir (31. 8. 2009 22:17)

redhead
Člen | 1313
+
0
-

zkus po tom requirování loader.php přidat řádek:

Framework::promo()

měl by se zobrazit obrázek s nette. Pokud ne tak to asi nic nenarequirovalo

radvis
Začátečník | 110
+
0
-

Nefunguje to:( nevím co stím, asi nato kašlu zatím budu muset být spokojený se starou verzí.

redhead
Člen | 1313
+
0
-

zkoušel jsi to promo? (chybí mi tam teda na konci středník)

radvis
Začátečník | 110
+
0
-
require_once LIBS_DIR . '/Nette/loader.php';

Framework::promo();

//Autoload
$loader = new RobotLoader();
$loader->addDirectory(APP_DIR);
$loader->addDirectory(LIBS_DIR);
$loader->register();

Fatal error: Class ‚Framework‘ not found in C:\wamp\www\neco.cz – Kopie\app\bootstrap.php on line 7

ic
Člen | 430
+
0
-

to je právě chyba že je to už před RobotLoaderem… pokud není načítán už v konfigu

edit: přeškrtnuto XD

Editoval ic (1. 9. 2009 17:52)

jasir
Člen | 746
+
0
-

ic napsal(a):

to je právě chyba že je to už před RobotLoaderem… pokud není načítán už v konfigu

Nene, RobotLoader není potřeba k načtení Nette, to se načítá samo přes NetteLoader (inkludnutím loader.php). RobotLoader je jen k načítání dalších knihoven a aplikace.

Zdenal
Člen | 21
+
0
-

zdravim mam problem s flashMessage mam tuto metodu:

<?php

public function regFormSubmitted($form)
	{
				$values = $form->getValues();
				$firmy = new Firmy;
				if($firmy->zaregistrujfirmu($values))
				{
					$this->flashMessage('Firma je zaregistrovaná.', 'info');


					$this->redirect('Default:druh_registraci');
				}
				else
				{
					$this->flashMessage('Firmu se nepovedlo zaregistrovat. Prosím zkuste to znovu', 'warning');

					$this->redirect('Default:druh_registraci');

				}

			}


}

?>

a problem je ze pokud pouziji redirect tak me to hodi chybu Cannot set HTTP code after HTTP headers have been sent (output started at C:\ …
pokud redirect nepouziji hlaska se zobrazi v poradku.

Editoval Zdenal (15. 11. 2009 20:08)

Ondřej Mirtes
Člen | 1536
+
0
-

Zdenal napsal(a):

zdravim mam problem s flashMessage…

Podívej se, kde ti ten output začíná.

BTW: V případě, že se nepodařilo zaregistrovat firmu, tak místo flash message a redirectu použij pouze $form->addError('Firmu se nepovedlo zaregistrovat. Prosím, zkuste to znovu.'), zobrazí se ta samá stránka s vyplněným formulářem od minule, aby mohl uživatel pozměnit jen nějakou hodnotu a zkusit to znova.

Zdenal
Člen | 21
+
0
-

Ondřej Mirtes napsal(a):

BTW: V případě, že se nepodařilo zaregistrovat firmu, tak místo flash message a redirectu použij pouze $form->addError('Firmu se nepovedlo zaregistrovat. Prosím, zkuste to znovu.'), zobrazí se ta samá stránka s vyplněným formulářem od minule, aby mohl uživatel pozměnit jen nějakou hodnotu a zkusit to znova.

Diky za addError, dobra vecicka :-) Ale tek k tomu flashMessage tu hlasku vypisuji v @layout, normalne v tele te stranky, uz vazne nevim kde je problem.

Ondřej Mirtes
Člen | 1536
+
0
-

Zdenal napsal(a):

Diky za addError, dobra vecicka :-) Ale tek k tomu flashMessage tu hlasku vypisuji v @layout, normalne v tele te stranky, uz vazne nevim kde je problem.

Podívej se do Laděnky, na jaký řádek odkazuje ta hláška „Output started at…“.

Tomik
Nette Evangelist | 485
+
0
-

Poznámka moderátora: Prosím odstraňujte vnořené citace, díky…

Zdenal
Člen | 21
+
0
-

Podívej se do Laděnky, na jaký řádek odkazuje ta hláška „Output started at…“.

odkazuje to sem ......\libs\Nette\Web\SessionNamespace.php:191).

<?php
Line 75:
Line 76:            if (!isset($allowed[$code])) {
Line 77:                throw new InvalidArgumentException("Bad HTTP response '$code'.");
Line 78:
Line 79:            } elseif (headers_sent($file, $line)) {
Line 80:                throw new InvalidStateException("Cannot set HTTP code after HTTP headers have been sent" . ($file ? " (output started at $file:$line)." : "."));
Line 81:
Line 82:            } else {
Line 83:                $this->code = $code;
Line 84:                $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1';
Line 85:                header($protocol . ' ' . $code, TRUE, $code);
Line 86:            }
Line 87:        }



?>

Line 80

jo a pouzivam sessions

Editoval Zdenal (17. 11. 2009 17:56)

Zdenal
Člen | 21
+
0
-

Asi nikdo nepomůže co???????

Ondřej Mirtes
Člen | 1536
+
0
-

Zdenal napsal(a):

Asi nikdo nepomůže co???????

Ukaž z Laděnky celou tu cestu (jak se to volá), chyba bude někde u Tebe :)

Zdenal
Člen | 21
+
0
-

toto je cela cesta.

Cannot set HTTP code after HTTP headers have been sent (output started at C:\VertrigoServ\www\data\Projekt\libs\Nette\Web\SessionNamespace.php:191).

Editoval Zdenal (19. 11. 2009 22:33)

Ondřej Mirtes
Člen | 1536
+
0
-

Zdenal napsal(a):

toto je cela cesta.

Cannot set HTTP code after HTTP headers have been sent (output started at C:\VertrigoServ\www\data\Projekt\libs\Nette\Web\SessionNamespace.php:191).

Ne, toto není celá cesta, myslím call stack. Případně můžeš zkusit Laděnku skrýt (černá šipka v pravém horním rohu) a ten dosavadní výstup uvidíš.

Editoval Ondřej Mirtes (19. 11. 2009 22:35)

Zdenal
Člen | 21
+
0
-

Asi nastavit casove pasmo co? Sorry ale jsem zacatecnik.

Strict Standards: strtotime() [function.strtotime]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‚Europe/Paris‘ for ‚1.0/no DST‘ instead in C:\VertrigoServ\www\data\Projekt\libs\Nette\Web\SessionNamespace.php on line 191

Editoval Zdenal (19. 11. 2009 22:38)

Zdenal
Člen | 21
+
0
-

uz vse funguje jak ma :-)) Musel jsem vytvorit konfiguracni soubor ach jo, to jsem netusil :-))))

Zdenal
Člen | 21
+
0
-

jo a dik Ondro s tou ladenkou, to me privedlo na spravnou cestu :-)