1

(0 odpowiedzi, napisanych Ogólne)

hej,

mam nastepujacy problem:

-model A jest w relacji hasOne B

wiem, ze mozna zapisac za pomoca jednego formularza wiele rekordow dla pojedynczego modelu za pomoca saveAll:

w widoku:

A.0.title
A.0.slug

A.1.title
A.1.slug

A.3.title
A.4.slug

itp.

w kontrolerze $this->A->saveAll($this->data['A']);

teraz chcialbym na tym formularzu rowniez zapisywac rekordy do modelu B - i fajnie by bylo aby komunikaty walidacyjne tez sie pojawialy przy polach z modelu B:

probowalem cos takiego ale bez rezultatu:

w widoku:

A.0.title
A.0.slug

A.0.B.pole1
A.0.B.pole2

A.1.title
A.1.slug

A.1.B.pole1
A.1.B.pole2

A.3.title
A.4.slug

A.3.B.pole1
A.4.B.pole2

macie jakis pomysl ?

2

(10 odpowiedzi, napisanych Ogólne)

wow - szacunek, z ciekawa aplikacja walczysz smile natomiast to co napisal id02009 ma sens i ludzie to juz implementuja - czyli przeciazenie metody find, a kluczem cache jest zserializowana tablica parametrow. polecam lekture kodu zrodlowego croogo (taki cmsik w cake):

http://github.com/croogo/croogo/blob/ma … _model.php

3

(10 odpowiedzi, napisanych Ogólne)

szczerze to nie przekonuje mnie Twoja metoda - teoretycznie to dziala ale tylko dla 1 modelu. a co w sytuacji gdy np mam model Wiadomosc i pokazuje uzytkownikowi widok jego skrzynki odbiorczej - przy kazdej wiadomosci jest avatar nadawcy - jak chcesz Twoja metoda sprawdzac aktualnosc np avatara nadawcy (ktory moze byc zmieniony przez uzytkownika w kazdej chwili) ?

4

(3 odpowiedzi, napisanych Ogólne)

bardzo dobre pytanie, tez sie nad tym zastanawialem, jest pytanie jak odnosic sie do tych zalaczonych plikow w samym HTMLowym szablonie emaila? wie ktos? smile

5

(5 odpowiedzi, napisanych Ogólne)

m1chal napisał/a:

w kontrolerze, w akcji brakuje wywolania funkcji z modelu "validates()" ...
np.

function add() {
   if(!empty($this->data)) {
      $this->Model->set($this->data);
      if($this->Model->validates()) {
         // wszystko pola sa ok 
      }else{ 
         //oops, bledy 
      }
   }
}

w pytaniu nie bylo nic na temat tego, ze kolega chcial zwalidowac dane z poziomu kontrolera wiec twoja sugestia ze brakuje validates() jest  bledna smile

6

(8 odpowiedzi, napisanych Ogólne)

no musze przyznac, ze jest duzo racji w tym co piszesz. tak btw gwoo juz nie pisze cake-a tylko lithium smile

7

(8 odpowiedzi, napisanych Ogólne)

deweloperzy Cake radza uzywac loadModel, no i zauwaz jaka roznica w objetosci kodu tongue

8

(8 odpowiedzi, napisanych Ogólne)

skorzystaj z loadModel:

if (!isset($this->Member)) $this->loadModel('Member');

9

(3 odpowiedzi, napisanych Ogólne)

okej problem rozwiazany - pomogl kolega z GoldenLine - trzeba ustawic parametr callbacks na true w metodzie deleteAll - wtedy dziala odswiezanie pol counter cache

pozdrawiam

10

(3 odpowiedzi, napisanych Ogólne)

to chyba nie dziala z kazda wersja. juz sam nie wiem - ale wydaje mi sie ze to jest bug? teraz musze robic delete w petli - nie lepiej byloby odpalic deleteall ? jedno zapytanie to lepsze rozwiazanie niz np 10 zapytan. teraz mam relacje - posty - kategorie - jak uzytkownik wywali jakies posty to powinien sie odswiezac licznik w tabeli kategorie.

11

(3 odpowiedzi, napisanych Ogólne)

hej,

w ogole to powinienes stworzyc osobny kontroler na Captche - np. CaptchaController - w nim w metodzie index() mozesz generowac obrazek pamietajac o wylaczeniu layoutu i widoku:



function index() {
$this->layout = null;

$this->autoRender = false;

Configure::write('debug', 0);
//generujesz obrazek
}

Mógłbym czarować z javascriptem, ale wolałbym tego uniknąć ze względu na przejrzystość kodu i czas na to poświęcony.

No coz, skoro to jest AJAX to nie unikniesz JSa. Ja bym wlasnie zrobil to w JSie, olewajac Ajaxowy Helper z Cake (zwlaszcza, ze chodzi Ci o bardzo customizowane rzeczy).

Kiedy odświeżę stronę wybrana pozycja w select'ie zostaje

- to musisz zrobic i tak na cookies

13

(2 odpowiedzi, napisanych Ogólne)

hej,

jest z tym jeden maly problem:

* CakePHP session IDs are also regenerated between requests if
* 'Security.level' is set to 'high'

poradzilem sobie inaczej - postanowilem skorzystac z klasy Cache:

1) wrzucilem w core.php wlasny setup keszu:

Cache::config('cacheDeletedUsers', array('engine'=>'File', 'path' => CACHE, 'duration' => 1200));

jesli 'Security.level' jest ustawiony na 'high' sesja w aplikacji trwa 20 minut - stad wartosc 1200 dla swiezosci keszu...

2) w app_controller wrzucilem taka funkcje:

function _cacheDeletedUsers($ids = array()) { //$ids - tablica id-ków usuniętych użytkowników
        
        Configure::write('Cache.disable', false);
        
        $deleted_users = Cache::read('DeletedUsers');
        if (!$deleted_users) {
            //pusty cache
            Cache::write('DeletedUsers', $ids, array('config' => 'cacheDeletedUsers'));
        } else {
            //pełny cache
            $new_ids = array_merge($deleted_users, $ids);
            Cache::write('DeletedUsers', $new_ids, array('config' => 'cacheDeletedUsers'));
        }
    
    }

wywoluje ja tuz po pomyslnym usunieciu usera przez admina...

3) w app_controller w beforeFilter sprawdzam, czy zalogowany user nie jest przypadkiem na liscie usunietych:

        
        if ($this->Auth->user()) {
            
            Configure::write('Cache.disable', false);
            $deleted_users = Cache::read('DeletedUsers');
            if ($deleted_users && in_array($this->Auth->user('id'), $deleted_users)) {
                $this->redirect($this->Auth->logout());
            }
}

Co sadzicie o tym rozwiazaniu???

hej,

kolejny problem - zalozmy ze w serwisie mamy dwoch uzytkownikow: jankowalski i doda.

jankowalski jest adminem, doda jest standardowym uzytkownikiem, obydwoje sa zalogowani w tym samym czasie. jankowalski z panelu admina w aplikacji usuwa uzytkownika doda - jednak doda jest ciagle zalogowana i jej dane znajduja sie w sesji. jak automatycznie wylogowac dode po usunieciu tego uzytkownika? zakladam ze nie przechowuje sesji w bazie

15

(3 odpowiedzi, napisanych Ogólne)

hej,

czy mi sie wydaje czy deleteAll nie powoduje odswiezenie sie pol typu counterCache? to chyba jest bug frameworka ???

16

(6 odpowiedzi, napisanych Ogólne)

hej,

ale przeciez na localhoscie mozesz zasymulowac np jakas domene przez vhosty w konfie apache`a :
tu masz tutorial: http://www.jamesfairhurst.co.uk/posts/v … eb_server/

w ten sposob na localu i produkcji bedziesz mial takie same sciezki

pozdrawiam

17

(2 odpowiedzi, napisanych Ogólne)

hej,

tylko ze TreeBehaviour nie stronnicuje mi danych smile tu jest ten problem.

zrobilem to inaczej. najpierw pobieram metoda paginate tylko komentarze 1 poziomu (te z parent_id = null).
a pozniej dla kazdego komentarza 1 poziomu szukam dzieci z pomoca find('threaded'). w ten sposob wszystkie odpowiedzi na dany komentarz sa zawsze na jednej stronie.

18

(2 odpowiedzi, napisanych Ogólne)

hej,

mam pytanie - probuje zrobic watkowane komentarze na blogu, ktore dodatkowo beda podzielone na strony. jest cos takiego jak paginacja dla find('threaded') ??? czy trzeba ja samemu napisac ?

pozdrawiam

19

(1 odpowiedzi, napisanych Ogólne)

hej, udalo mi sie znalezc rozwiazanie jak sprawdzic poszczegolne czesci daty. Po prostu w kontrolerze stworzylem 'tymczasowe' pole 'birthdate2' ktora bedzie trzymac polaczona date z selectow w formie stringa:


$this->data['User']['birthdate2'] = $this->data['User']['birthdate']['year'] . '-' . $this->data['ser']['birthdate']['month'] . '-' . $this->data['User']['birthdate']['day'];  
if ($this->data['User']['birthdate2'] == '--') $this->data['User']['birthdate2'] = ''; //wszystkie selecty puste

a pozniej w modelu podpialem pod pole birthdate2 cake`owa walidacje. Czyli stworzylem sobie tymczasowe pole ktorego nie ma w tabeli i podpialem pod to pole walidacje (fajna sprawa). A pozniej juz w widoku pod selectami wyswietlam po prostu $form->error('birthdate2') smile

pozdrawiam

20

(1 odpowiedzi, napisanych Ogólne)

hej,

mam pewien problem z ustawieniem walidacji daty urodzenia aby zachowywala sie tak jakbym chcial.

w widoku mam cos takiego:

<?php echo $form->day('birthdate', null, array(), 'wybierz...'); ?>
<?php echo $form->month('birthdate', null, array(), 'wybierz...'); ?>
<?php echo $form->year('birthdate', (date('Y')-100), date('Y'), null, array(), 'wybierz...'); ?>
<?php echo $form->error('birthdate'); ?>

teraz tak - podanie daty jest opcjonalne. czyli jak wszystie selecty sa "czyste" (w pozycji wybierz...) nie ma pojawiac sie zaden blad.
niemniej jednak jesli uzytkownik wybierze np jakis rok a pozostale selecty zostawi puste ma pojawic sie blad. dodatkowo jesli wszystkie pola sa wypelnione musi byc rowniez sprawdzenie wieku.

jak zrobie debug($this->data) w kontrolerze mam cos takiego (np w przypadku wypelnienia jednego selecta):

[birthdate] => Array
                (
                    [day] => 03
                    [month] => 
                    [year] => 
                )

a w modelu mam juz tylko

[birthdate] =>

wiec cake w ktoryms miejscu musi robic jakis merge tych danych z kontrolera. macie pojecie gdzie to sie dzieje?

pozdrawiam

21

(8 odpowiedzi, napisanych Ogólne)

ale mam dla ciebie taki maly workaround tak btw. - wrzuc w ten plik cron-5min.php jakiegos cURLa ktory wywoluje jakas akcje Twojego kontrolera smile

22

(8 odpowiedzi, napisanych Ogólne)

no jak masz badziewny hosting na home.pl to trudno sie dziwic, ze zasetupowanie crona z cakephp to bedzie droga przez meke.

dla mnie sprawa jest prosta - aby zrobic to porzadnie musisz miec dostep do shella i crontaba - czyli - zmien hosting.

pozdrawiam

23

(3 odpowiedzi, napisanych Ogólne)

a czemu nie korzystasz z wbudowanego EmailComponent ?

24

(14 odpowiedzi, napisanych Ogólne)

z tego co widze to jest zwykla funkcja operujaca na stringach, wiesz co mozesz zrobic - wrzuc sobie w /app/config jakis pliczek np funkcje_pomocnicze.php

i zaincluduj go w bootstrap.php :

include_once('funkcje_pomocnicze.php');

wtedy do takich funkcji mozesz odnosic sie w calej aplikacji (w kontrolerach, widokach, modelach).

Przy czym ta metoda postepowania dotyczy glownie takich funkcji jak Twoja.

Pozdrawiam

25

(14 odpowiedzi, napisanych Ogólne)

niezgodne jest wywolywanie metody kontrolera w widoku, natomiast w innym kontrolerze do funkcji zdefiniowanej w app_controller odnosisz sie tak:

$this->nazwa_funkcji();

przy czy jesli jest to funkcja pomocnicza to warto ja poprzedzic podkresleniem - wtedy nie jest widoczna z poziomu przegladarki:

$this->_nazwa_funkcji();