Tomasz Wójcik

inżynier informatyk, specjalizacja: sieci komputerowe

Wypowiedzi

  • Tomasz Wójcik
    Wpis na tablicy
    • 13.03.2017, 01:14
  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Czy wylogowanie powinno tak być?
    30.07.2010, 10:17

    Marek Urbanowicz:

    function logout() {
    //to dodałem później $this->Session->destroy();
    $this->redirect($this->Auth->logout());
    }

    ja uzywam takiego kodu, bo po co niszczyc cala sesje :)

    $this->Session->delete('Auth');
    $this->redirect($this->Auth->logout());
    Tomasz Wójcik edytował(a) ten post dnia 30.07.10 o godzinie 10:17

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Dziwny problem. WWW łączy się do bazy a konsola nie..
    23.07.2010, 01:10

    - modyfikowales pliki w katalogu /cake ?
    - sprawdz czy np. w bootstrapie nie masz jakiegos babola, bo odpalanie konsoli rowniez sprawia, ze parsowane sa pliki bootstrap, config/core itp.
    - ew. wgraj od nowa caly katalog /cake z wersji ktora tam masz, moze cos namieszales

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Jak to rozwiąć - jeden użytkownik, wiele grup, aktywne...
    20.07.2010, 13:27

    User
    - id (int, pk)
    - active_group_id (int, fk)
    - ...

    Group
    - id (int, pk)
    - ...

    Membership
    - id (int, pk)
    - user_id (int, fk)
    - group_id (int, fk)
    - description (text)
    - ...
    - unique (user_id, group_id)

    AppModel actsAs Containable
    User HABTM Group (with Membership)

    dodatkowo:
    User

    var $belongsTo = array(
    'ActiveGroup' => array(
    'className' => 'Group',
    'foreignKey' => 'active_group_id
    )
    );

    i potem masz normalne szukanie

    $user = $this->User->find('all', array(
    'conditions' => array(
    //'User.active' => 1,
    ),
    'contain' => array(
    'ActiveGroup',
    'Group',
    ),
    ));

    $user['ActiveGroup'] // aktywna grupa
    $user['Group'] // tablica wszystkich grup

    w ten sposob chcesz?

    edit:
    cala stukturke $user wpisz sobie do sesji albo do autha w sesji, chociaz wtedy pozostaje kwestia synchronizacji z baza gdy ktos inny zmieni Ci grupe a Ty bedziesz ciagnal dalej z sesji grupe (ktora juz moze nie byc tak naprawde aktywna/aktualna)Tomasz Wójcik edytował(a) ten post dnia 20.07.10 o godzinie 13:31

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Jak to rozwiąć - jeden użytkownik, wiele grup, aktywne...
    20.07.2010, 11:51

    User moze nalezec do wielu grup (User belongsTo Group)
    Grupa moze miec wielu Userow (Group hasMany user)

    a takie polaczenie to czysty HABTM, ktorego definiujesz przez

    $hasAndBelongsToMany = array(
    'Group' => array(
    ...,
    'with' => 'Membership' // model stoi miedzy User a Group
    )
    )


    Model Membership moze miec swoje pola i mozesz na nim normalnie dzialac, dokladnie taki przyklad jest nawet w CakeBooku w sekcji o relacjach modeli (w relacji HABTM) - poczytaj

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Problem z alokacją pamięci
    20.07.2010, 11:45

    jeszcze raz zapytam "co robisz potem z $table?". ja wiem ze jest to PHPowa tablica odpowiadajaca bezie danych, ale mnie sie rozchodzi o to co z nia robisz, jak ja wykorzystujesz i do czego?

    wyswietlasz wszystkie wiersze na stronie?
    liczysz sume jakiegos pola np. $tagle[$iteracja]['wartosc']?

    czy co, bo moze podejscie masz zle w ogole, moze SQL potrafi zrobic cos co Ty probujesz zrobic w PHPie.

    najwazniejsze jest sedno problemu, jak powiesz do czego potrzebujesz naraz 14 tys wierszy to sie cos wymysli, bo poki co mozesz tak:
    1. pobranie 3 tysi, zserializowanie i zapisanie do pliku #1 (taki cache) i potem kolejne 3 tysie czytasz, do pliku #2 itd.
    2. czytasz z cache #1, cos z nim robisz (jakies przetwarzanie) i znowu do pliku itd.
    3. na koniec czytasz z pliku, wyswietlasz, zwalniasz pamiec i czytasz z kolejnego pliku itd.
    no ale to kompletnie porabane podejscie imho, moze wystarczy rozbic Twoje zapytanie na kilka zapytan SQL, ktore rozwiaza Ci sprawe, no ale musisz powiedziec CO CHESZ ZROBIC.

    napisz jakie sa pola w tabeli SQL, potem jak chcesz je przetwarzac (co z nimi robic, policzyc sume, zliczyc rekordy, wyswietlic 14 tys wierszy na stronie czy jeszcze cos innego), bo bez takich podstawowych informacji to gowno mozna pomoc tak naprawde, a wtedy patrz powyzsze 3 punkty mojego rozwiazania - tez sie nadaja wtedy, jak nie wiem jaki jest problem.

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Problem z alokacją pamięci
    13.07.2010, 09:02

    1. musisz pobierac wszystkie pola z bazy danych?

    $query = 'SELECT id, nazwa, wartosc, ... FROM ...'

    zamiast
    $query = 'SELECT * FROM ...'


    pobierze tylko potrzebne pola, no chyba ze musisz wyciagnac wszystkie

    2. czy musisz ladowac wszystkie 14 tys rekordow do pamieci!? raczej watpie, naraz raczej nie operujesz na 14000 wierszy

    3. co potem robisz z $table, gdzie to jest uzyte i do czego? wyswietlasz na stronie naraz 14000 wierszy? tez watpie :P

    4. ten kod to czysty PHP, nie widze nic z CakePHP, wiec albo uprosciles albo piszesz kompletnie niezgodnie z podstawowymi zasadami MVC ... ale mam nadzieje, ze to tylko skrot pogladowy.

    generalnie - odpowiedz na wszystkie pytania, a w szczegolnosci na #3Tomasz Wójcik edytował(a) ten post dnia 13.07.10 o godzinie 09:02

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Problem z alokacją pamięci
    18.06.2010, 01:27

    1. przydzielic modelom krotsze aliasy - Cake bedzie indeksowal krotszymi tekstami ergo zajmie na aliasy (indeksy tablic) mniej ramu
    2. pobierac tylko potrzebne pola
    3. cache cache i jeszcze raz cache

    po przekazaniu danych do widoku (Controller::set(combine('dane')); usuwac (unset) $dane; (ew. kopiowac dane do widoku petla i unset'owac po kazdej iteracji - nie bedzie dubla w RAMie, no ale wolniej)

    ew. pobieranie rekordow i przetwarzanie (z cache'owaniem) na raty po 1500 rekordow z manualnym renderowaniem a nie autoRender, ktory wysysal widokowi wszystko naraz

    tyle mi na o tej godzinie przychodzi do glowy, swoja droga 64MB to calkiem sporo - niezla musi byc aplikacja, albo kiepska optymalizacja ;)
    pozdrawiam

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Problem z routingiem, potrzebuję niejako dwuznacznych...
    6.03.2010, 21:46

    aaa już nawet zapomniałem o tym wątku :P

    jakiś czas temu już sobie własnie zmieniłem delimitera na przecinek, a gwiazdka to już inna broszka

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Problem z routingiem, potrzebuję niejako dwuznacznych...
    19.02.2010, 21:29

    Witam.

    Piszę CMS, którego sercem jest kontroler PagesController (który w założeniu ma działać niejako front-controller). Model Page bazuje na TreeBehavior oraz drzewiastej strukturze slugów w postaci unikalnej ścieżki do danej strony.


    - aktualnosci (slug: aktualnosci)
    - produkty (slug: produkty)
    - produkt 1 (slug: produkty/produkt-1)
    - produkt 2 (slug: produkty/produkt-2)


    Do tego wszystkiego mam podpięty route w postaci:

    Router::connect(
    '/:path',
    array('controller' => 'pages', 'action' => 'view'),
    array(
    'pass' => array('path'),
    'path' => "(?!admin/)[\w/-]+",
    )
    );

    tak, aby linki do strony były w postaci:
    http://domena.pl/produkty/produkt-1


    A teraz mój problem:

    Nie mogę wywołać strony z parametrami np.
    http://domena.pl/produkty/aktywne

    ... ponieważ taki URI spowoduje szukanie strony o slugu "/produkty/aktywne" (będzie 404) zamiast znaleźć stronę "/produkty", a parametr "[0] => aktywne" wrzucić do Controller::params['named'].

    Macie jakąs radę jak to rozwiązać, żeby Router odpowiednio linkował do kontrolera, a jednocześnie poprawnie obsługiwał parametry passed i named zgodnie z konwencją przyjętą w ścieżce?

    od razu mówię, że nie wiem jakie nazwy parametrów będą się pojawiać w adresie URI, bo to będzie zależne od wtyczek, zatem podanie na sztywno nazw parametrów w Router::connect() odpada.

    Pomóżcie :)Tomasz Wójcik edytował(a) ten post dnia 19.02.10 o godzinie 21:30

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Usuwanie przez AJAX'a, dziwny problem :/
    23.12.2009, 14:50

    function ajax_delete($id = null) {

    przy wywolaniu "GET /bleh/delete/1" masz "$id = 1"
    sprawdzasz sobie IFem czy $id poprawny (istnieje w bazie) i jesli tak to usuwasz i zwracasz cos tam, bez parametru w $id masz null'aTomasz Wójcik edytował(a) ten post dnia 23.12.09 o godzinie 14:51

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie flash tylko kidy coś w środku jest.... i jquery ui">Wyświetlenie "otoczki" session->flash tylko kidy coś w...
    4.12.2009, 14:08

    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 :)

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie flash tylko kidy coś w środku jest.... i jquery ui">Wyświetlenie "otoczki" session->flash tylko kidy coś w...
    4.12.2009, 02:10

    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

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Jakie IDE ma support dla CakePHP?
    29.11.2009, 03:22

    Marek Urbanowicz:
    /**
    * College model
    *
    * @var $College
    */

    tekst "College model" nie ma kompletnie żadnego znaczenia! to @var decyduje o powiązaniu.

    1. Spróbuj z @property nazwa_pola_klasy (@property $College)
    2. w jakiejś akcji kontrolera wpisz "$this->" i wciśnij Ctrl+spacja, wpisz "C" i zobacz czy w podpowiedzi linia z nazwą tej zmiennej będzie miała po prawej stronie poprawną nazwę klasy do której się odnosi.

    BTW: Format jest taki:
    /**
    * Jakiś krótki opis kodu
    *
    * Jakiś długi
    * wieloliniowy opis kodu, ktory moze byc pominiety
    *
    * @var $College tutaj opis zmiennej $College
    */

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Jakie IDE ma support dla CakePHP?
    27.11.2009, 01:53

    OT, pisz do twórcow netbinsow :P

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Jakie IDE ma support dla CakePHP?
    26.11.2009, 02:54

    class UsersController extends AppController {
    /**
    * Model juzera
    *
    * @var User
    */
    public $User;

    public function index(){
    $juzerzy = $this->User->find('all');
    }
    }


    sprawdz, czy masz analogicznie do powyższego przyskładu (kod "@var User" szczególnie, który powoduje linkowanie dla Code completion)

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Trzy poziomy uprawnień. W jaki sposób to najlepiej...
    18.11.2009, 02:27

    Jest narzędzie do automatycznego utworzenia obiektów ACO dla każdej akcji kontrolerów (oraz kontrolerów w pluginach) o nazwie "buildAcl" (CakeBook). Możesz to sobie przerobić żeby generował i nadawał uprawnienia, albo samemu to robić:

    class JakisController extends AppController {
    public $components = array('Acl');
    public $uses = array('User');

    function generuj($user_id = null){
    $Aco = $this->Acl->Aco; //dla PHP4 "=&"
    $acos = $Aco->find('all', array('conditions' => array('alias LIKE' => 'admin_%')));
    foreach ($acos as $aco) {
    $this->User->id = $user_id;
    $userAro = $this->User->node();
    // ACL korzysta z TreeBehavior, więc można pobrać pełną ścieżkę w drzewie
    $aroPath = impode('/', $Aco->getPath($userAro['Aro']['id']));
    $acoPath = impode('/', $Aco->getPath($aco['Aco']['id']));
    // znaleźć pasujący obiek ARO usera o podanym $user_id
    $this->Acl->allow($aroPath, $acoPath);
    }
    }
    }

    (Pisane z palca, ale zamysł powinieneś zrozumieć)

    'groupAdmin' => 'true'

    Kod jest po to, żeby działał reverse-routing używając HtmlHelper'a w widokach do tworzenia adresów URI:

    <?php
    echo $html->link('Jakiś link', array('groupAdmin' => true));
    ?>

    i już masz wygenerowany link do tej samej strony zgodnie z regułami pasującymi z pliku app/config/routes.php. Parametr groupAdmin jest przekazany do klasy Router w celu wygenerowania linka a ten z kolei wie, że jeśli ten parametr jest true to ma generować linki z prefiksem "groupAdmin/".

    Poczytaj o "prefixed routing" na CakeBooku albo chociaż o "admin routing"Tomasz Wójcik edytował(a) ten post dnia 18.11.09 o godzinie 02:27

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Warning (512): SQL Error: 1064: You have an error in your...
    18.11.2009, 02:10

    Ja myślę że jest gdzieś błąd w jakimś skrypcie :/

    Mam y Ci wywróżyć przyczynę błędu po 1 linii kodu? Ustaw debug=2 w app/config/core.php, odpal skrypt, skopiuj SQL dump, który jest pod stroną a w szczególności całe wygenerowane przez Cake'a zapytanie, które generuje błąd.

    Może złe relacje modeli, może źle użyty behavior translate, nie wiem ...

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie Trzy poziomy uprawnień. W jaki sposób to najlepiej...
    14.11.2009, 00:21

    ACL + Auth + "Prefixed routing"

    Ścieżka routera:


    /groupAdmin/:controller/:action/*
    //odpowiadajaca
    array('prefix' => 'groupAdmin', 'groupAdmin' => true')


    Funkcje w kontrolerach:

    // user
    function add(){}
    // admin
    function admin_add(){}
    // groupAdmin
    function groupAdmin_add(){}


    Dla CakePHP 1.2.x używasz ścieżki routera jak na poczatku postu.
    Dla Cake 1.3 (narazie dev) robisz w /app/core.php:

    Configure::write('Routing.prefixes', array('admin', 'groupAdmin'));


    Odpowiednio ustawiasz ACLe i już.Tomasz Wójcik edytował(a) ten post dnia 14.11.09 o godzinie 00:23

  • Tomasz Wójcik
    Wpis na grupie CakePHP w temacie problem - spolszczenie miesięcy w $form->date
    13.11.2009, 01:21

    domyślna domena dla Cake'a to "default", zatem musisz stworzyć plik default.po w lokalizacji "app/locale/pol/LC_MESSAGES/default.po". W nim muszą się znaleźć oczywiście teksty do tłumaczenia (Cake posiada własne narzędzie do zrobienia pliku POT z tłumaczeniami, bądź skorzystaj z POEdit do jego budowy).

    Słowa kluczowe dla domeny default:

    __:1
    __n:1,2


    Format liczby mnogiej dla Polski:
    nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;


    Ustawiasz, klikasz "aktualizuj katalog", tłumaczysz teksty (tam będą miesiące i wszystko z czego korzysta CakePHP), zapisujesz w wyż. wym. lokalizacji i śmiga. Oczywiście wszystkie teksty, które chcesz tłumaczyć muszą być zawarte w __() lub __n() i pochodnych.
    Poczytaj o tłumaczeniu na "Cake book"Tomasz Wójcik edytował(a) ten post dnia 13.11.09 o godzinie 01:29

Dołącz do GoldenLine

Oferty pracy

Sprawdź aktualne oferty pracy

Aplikuj w łatwy sposób

Aplikuj jednym kliknięciem

Wyślij zaproszenie do