konto usunięte

Temat: Wyświetlenie "otoczki" session->flash tylko kidy coś w...

jak to zrobić?

mianowicie chodzi o to, że chcę sformatować odpowiednio wygląd komunikatów flash - albo odpowiedni div albo dialog.
jednak problemem jest żeby wyświetlić odpowiedniego div'a tudzież dialog tylko wtedy kiedy jest ustawiony session->flash('auth') albo session->flash() a nie wyświetlać go kiedy jest pusty.
Nie da się tego zrobić przy użyciu if(!empty($session->flash()) bo jest to metoda "echojąca" więc nie można sprawdzić czy jest to puste czy nie.. ma ktoś jakieś rozwiązanie? przypuszczam, że nie tylko ja mam taki problem :)

od razu mówię, że nie pasuje mi zrobienie klasy message czy jak to tam ma div w którym wyświetlają się flash'e bo wykorzystuje na całej stronie zunifikowane style z jquery-ui
Tomasz Wójcik

Tomasz Wójcik inżynier informatyk,
specjalizacja: sieci
komputerowe

Temat: Wyświetlenie "otoczki" session->flash tylko kidy coś w...

Hyh, też robię w jQuery UI z użyciem CakePHP :) i ja rozwiązałem flasha tak:

Zrób plik app/views/elements/flash.ctp o zawartości

<?php if($session->check('Message.' . $key)): ?>
<div class="ui-widget align-center flash">
<?php if($type == 'error'): ?>
<div class="ui-state-error ui-corner-all align-left" style="padding: 0 0.5em;">
<p class="align-center">
<span class="ui-icon ui-icon-alert float-left" style="margin-right: 0.3em;"></span>
<?php echo $session->read('Message.' . $key . '.message'); ?>
</p>
</div>
<?php elseif($type == 'highlight'): ?>
<div class="ui-state-highlight ui-corner-all align-left" style="padding: 0 0.5em;">
<p class="align-center">
<span class="ui-icon ui-icon-info float-left" style="margin-right: 0.3em;"></span>
<?php echo $session->read('Message.' . $key . '.message'); ?>
</p>
</div>
<?php endif; ?>
</div>
<?php $session->del('Message.' . $key); ?>
<?php endif; ?>


Wywołujesz przez:

<?php echo $this->element('flash', array('key' => 'auth')); ?>
<?php echo $this->element('flash', array('key' => 'auth', 'type' => 'hightlight)); ?>


Dodatkowo u siebie zrobiłem element default_flashes.ctp:

<?php echo $this->element('flash', array('key' => 'flash', 'type' => 'highlight')); ?>
<?php echo $this->element('flash', array('key' => 'flashError', 'type' => 'error')); ?>
<?php echo $this->element('flash', array('key' => 'auth', 'type' => 'error')); ?>


a w kontrolerach itp. generuje sobie flashe tak:

// highlight
$this->Session->setFlash(__d('admin', 'Group saved', true));
// error
$this->Session->setFlash(__d('admin', 'Group could not be saved. Please, try again.', true), null, null, 'flashError');

dzięki temu flashError bedzie klasu ui-state-error w widoku, a normalny flash w ui-state-highlight.

Miłego pehapowania :)Tomasz Wójcik edytował(a) ten post dnia 04.12.09 o godzinie 02:14

konto usunięte

Temat: Wyświetlenie "otoczki" session->flash tylko kidy coś w...

Tomasz Wójcik:
Dodatkowo u siebie zrobiłem element default_flashes.ctp:

<?php echo $this->element('flash', array('key' => 'flash', 'type' => 'highlight')); ?>
<?php echo $this->element('flash', array('key' => 'flashError', 'type' => 'error')); ?>
<?php echo $this->element('flash', array('key' => 'auth', 'type' => 'error')); ?>


a w kontrolerach itp. generuje sobie flashe tak:

// highlight
$this->Session->setFlash(__d('admin', 'Group saved', true));
// error
$this->Session->setFlash(__d('admin', 'Group could not be saved. Please, try again.', true), null, null, 'flashError');

dzięki temu flashError bedzie klasu ui-state-error w widoku, a normalny flash w ui-state-highlight.

Rozumiem, że default flashes wrzucasz sobiew default.ctp prawda? :)
a skoro już się okazało, że korzystasz z jQuery UI to używasz tabs? bo u mnie problem jest taki że muszę jakoś zrobić tak, żeby po przełączeniu taba zniknął już error tudzież normalny flash.
to wystarczy zrobić tak żeby dopisać do skryptu z tabs opcję że jak się przełącza tabs'a to #flash ( trzeba by dostawić id w divach) tylko jak to zrobić w javascripcie bo jeszcze zbytnio się z nim nie zaprzyjaźniłem :)
Tomasz Wójcik

Tomasz Wójcik inżynier informatyk,
specjalizacja: sieci
komputerowe

Temat: Wyświetlenie "otoczki" session->flash tylko kidy coś w...

Marek Urbanowicz:

Rozumiem, że default flashes wrzucasz sobiew default.ctp prawda?
Akurat linkuje do niego w każdym pliku widoku akcji kontrolera, żeby był w odpowiednim miejscu, ale generalnie - tak.
a skoro już się okazało, że korzystasz z jQuery UI to używasz tabs? bo u mnie problem jest taki że muszę jakoś zrobić tak, żeby po przełączeniu taba zniknął już error tudzież normalny flash.
to wystarczy zrobić tak żeby dopisać do skryptu z tabs opcję że jak się przełącza tabs'a to #flash ( trzeba by dostawić id w divach) tylko jak to zrobić w javascripcie bo jeszcze zbytnio się z nim nie zaprzyjaźniłem :)
1. Na pewno tabsy mają jakiegoś callbacka na przełączanie się między nimi, więc w nich robisz coś a'la

jQuery.tabs({
change: function(...){
// jakies sprawdzenie na który tab wchodzisz
if(...)
// ukrycie divów o klasie 'flash'
$('div.flash').hide();
}
});

ewentualnie:
2. ładować zawartość tabów AJAXem, ale ja tego nie preferuje (co jeśli ładujesz zawartość taba AJAXem a dana akcja kontrolera modyfikuje część laya spoza taba, albo uzywa innego laya? - zmian nie widać). Ja używam tylko wyglądu tabsów, ale nie ich funkcjonalności, zamiast tabów mam zwykłe linki i prezładowuję stronę, a na tabach mam menu rozwijane zrobione ... po prostu pasek mi sie podoba, to sobie na nim zrobiłem menu, a co :)

konto usunięte

Temat: Wyświetlenie "otoczki" session->flash tylko kidy coś w...

mi się akurat ich funkcjonalność podoba ale wiadomo, to kwestia gustu już :)
dzięki za odpowiedzi

konto usunięte

Temat: Wyświetlenie "otoczki" session->flash tylko kidy coś w...

temat już wieki temu był, ale nie wiem czemu teraz wkradł mi sie dziwny problem, otóż ikonkę 'i' wyświetla mi ok, ale wszelkie napisy zaczynają się od drugiej linii dopiero a to trochę irytujące i źle wygląda.. co może być przyczyną? bo to chyba css'owe bardziej i nie mogę tego namierzyć coś

Następna dyskusja:

CakePHP 1.2 RC3 jest!




Wyślij zaproszenie do