Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Marek, dodany: 01.03.2012 19:56, tagi: zend_framework

Aby wyłączyć renderowanie layoutu w kontrolerze wpisujemy:

$this->_helper->layout->disableLayout();

Metodę disableLayout znajdziemy w klasie Zend_Layout.

Aby wyłączyć renderowanie danego widoku w kontrolerze wpisujemy:

$this->_helper->viewRenderer->setNoRender();

Wywołujemy tutaj przy użyciu helpera metodę setNoRender() klasy Zend_Controller_Action_Helper_ViewRenderer

Autor wpisu: Marek, dodany: 01.03.2012 19:56, tagi: zend_framework

Poniżej przedstawiam maksymalnie uproszczony sposób przesyłania plików na serwer przy pomocy Zend Framework. Zakładam zapis pliku na serwerze, oraz zapis informacji o jego nazwie w bazie danych. Jest to pierwszy z serii artykułów – mam nadzieję, że w prosty sposób wprowadzi w to rozbudowane zagadnienie. A więc do dzieła.

Tworzymy bazę danych. Tutaj użyję SZBD SQLITE3. Bazę umieszczę w katalogu:

data/db/

i nazwę ją:

testfile.db

A więc z katalogu głównego aplikacji wykonujemy:

mkdir -p data/db

A potem:

sqlite3 testfile.db

W konsoli sqlite tworzymy tabelę files:

create table files (
id integer primary key autoincrement,
filename varchar(150));

Gdzie w kolumnie „filename” będziemy przechowywać nazwę pliku. Teraz poinformujemy naszą aplikację o wybranym adapterze bazy danych i jej lokalizacji.

W pliku:

application/configs/application.ini

wpisujemy:

resources.db.adapter = "pdo_sqlite"
resources.db.params.dbname = APPLICATION_PATH "/../data/db/testfile.db"

W pliku:

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Marek, dodany: 01.03.2012 19:56, tagi: zend_framework

W poprzednim wpisie przedstawiłem podstawy przesyłania pliku na serwer przy pomocy Zend Framework. Czas zagłębić się bardziej w to zagadnienie.

Kolejnym przypadkiem, którym się zajmę jest rozbudowa formularza o pole tekstowe przechowujące opcjonalną nową nazwę dla wysyłanego pliku.

Skoro możemy zmienić nazwę pliku, użyty poprzednio walidator Zend_Validate_File_NotExists() już nie spełni swojej roli, bo możemy przesłać plik o takiej samej nazwie jak w katalogu docelowym, o ile podamy w formularzu nową nazwę (którą de facto musimy również zweryfikować).

A więc użyjemy własnego walidatora, który będzie dziedziczył po wcześniej wspomnianym, wprowadzając dodatkowe sprawdzanie dla nowej nazwy pliku. Walidator umieszczam w katalogu /library/My/Validate/File/

require_once 'Zend/Validate/File/NotExists.php';

class My_Validate_File_NotExists extends Zend_Validate_File_NotExists {

    /**     
     * @var string nowa nazwa dla pliku     
     */
     protected $_newName = null;

    public function __construct($directory = array(), $newName = null) {
        $this->_newName = $newName;
        parent::__construct($directory);
    }

    public function isValid($value, $file = null) {
        // ustawienie nowej nazwy pliku, jeśli podana
        if (!empty($this->_newName)) {
            $fileName = isset($file['name']) ? $file['name'] : $value;
            $file['name'] = $this->_newName . '.' . pathinfo($fileName, PATHINFO_EXTENSION);
        }
        parent::isValid($value, $file);
    }

}

Co tu się dzieje? Dzięki dziedziczeniu i w myśl zasady DRY nasz walidator jest bardzo prosty. W konstruktorze przekazujemy do niego nową nazwę pliku i wywołujemy konstruktor klasy rodzica. Metoda isValid() to serce naszej klasy. Sprawdzamy w niej czy została ustawiona nowa nazwa dla pliku. Jeśli tak, modyfikujemy nazwę przetrzymywaną w tablicy $file, dodając do niej rozszerzenie przesłanego pliku (które wyciągamy przy pomocy funkcji pathinfo()). Tak zmodyfikowane dane poddajemy walidacji klasy Zend_Validate_File_NotExists.

Przejdźmy do klasy formularza:

class Application_Form_Rename extends Zend_Form {

    public function init() {
        $this->setMethod('post');

        $newName = new Zend_Form_Element_Text('newname');
        $newName->setLabel('Zmień nazwę pliku:')
                ->addFilters(array('StringTrim', 'StripTags'));

        $file = new Zend_Form_Element_File('filename');
        $file->addPrefixPath('My_Validate', '/My/Validate', 'validate')
                ->setLabel('Plik:')
                ->setRequired()
                ->setDestination(APPLICATION_PATH . '/../public/uploads')
                ->addValidator('Size', true, 1048576)
                ->addValidator('Extension', false, 'pdf');

        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('Wyślij')
                ->setIgnore(true);

        $this->addElements(array($newName, $file, $submit));
    }

    public function addRenameValidator($newName) {
        $destination = $this->filename->getDestination();
        if (!empty($newName)) {
            $this->filename->addFilter('Rename', array(
                'target' => $destination . DIRECTORY_SEPARATOR . $newName . '.'
                . pathinfo($this->filename->getFileName(), PATHINFO_EXTENSION),
                'overwrite' => false));
        }
        $this->filename->addValidator(new My_Validate_File_NotExists($destination, $newName));
    }
}

W metodzie init(), inicjującej pola formularza, dodajemy obiekt Zend_Form_Element_Text, który będzie odpowiadał za kontrolkę nowej nazwy pliku. Dalej na obiekcie $file wywołujemy metodę addPrefixPath(), która pomoże później znaleźć klasę naszego walidatora. Kolejna metoda addRenameValidator() dodaje filtr Zend_Filter_File_Rename(), który zmieni nazwę przesyłanego pliku na nową (o ile ją podaliśmy). Dalej dodajemy do obiektu $filename  walidator My_Validate_File_NotExists(), przekazując mu nową nazwę dla pliku.

Przyjrzyjmy się teraz kontrolerowi:

public function renameAction() {
        $form = new Application_Form_Rename();
        $form->setAction($this->view->url());
        if ($this->getRequest()->isPost()) {
            $data = $this->getRequest()->getPost();
            $form->addRenameValidator($data['newname']);
            if ($form->isValid($data)) {
                if (!$form->filename->receive()) {    //odbieramy plik
                    throw new Zend_Exception('Wystąpił błąd przy odbieraniu pliku!');
                }
                $db = new Application_Model_DbTable_File();
                $db->insertRenamed($form->getValues());
                $this->view->msg = 'Plik został pomyślnie zapisany';
            } else {
                $this->view->msg = 'Wystąpił błąd!';
            }
        }
        $this->view->form = $form;
    }

Akcja rename naszego kontrolera bardzo przypomina akcję index z poprzedniego wpisu. Z tym, że:

  • przed sprawdzeniem poprawności danych przesłanych z formularza, wywołujemy metodę addRenameValidator(), podając jej nową nazwę pliku (co prowadzi do dodania wyżej opisanego walidatora)
  • jeśli wystąpił błąd podczas odbierania pliku, wyrzucamy wyjątek
  • jeśli plik został prawidłowo przesłany na serwer, zapisujemy dane do bazy

Został jeszcze model:

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: l3l0, dodany: 29.02.2012 19:11, tagi: symfony

Ostatnio zrobiło się głośno o nowej edycji Symfony stworzonej przez KnpLabs Po dyskusjach na twiterze oraz githubie pojawił się nowy PR który cofa pewnie zmiany struktury katalogów: https://github.com/KnpLabs/KnpRadBundle/pull/11 Jako iż pracuję dla KnpLabs mogłoby się wydawać że dobrze znam już edycję RAD, jednak tak na prawdę jeszcze nie próbowałem. Postanowiłem to zmienić i dowiedzieć się [...]

Autor wpisu: Łukasz Socha, dodany: 24.02.2012 22:11, tagi: css

pobierz w .pdf(przeznaczone do wydruku)

Tworząc rożnego rodzaju strony www często napotykamy konieczność podmiany tekstu obrazkiem – np. umieszczając logo strony lub niestandardowy nagłówek. Moglibyśmy użyć do tego znacznika img, ale ten sposób nie jest przyjazny użytkownikom ani SEO friendly. Z pomocą przychodzi CSS.

Jest wiele technik radzenia sobie z tym problem. Przedstawię dwie najprostsze i chyba obecnie najpopularniejsze.

1. sposób

<h1>Image Replacement</h1>

h1{
    background: url('images/header.png') no-repeat;
    height: 150px;
    width: 250px;
    text-indent: -9999em;
}

Założenia tej techniki są bardzo proste: dodaje do elementu tło z obrazkiem i wyrzuca z niego tekst gdzieś poza ekran.

2. sposób

<h1>Image Replacement</h1>

h1{
    background: url('images/header.png') no-repeat;
    height: 150px;
    width: 250px;
    font-size:0;
}

Drugi sposób jest jeszcze bardziej banalniejszy. Wystarczy nadać atrybutowi font-size zerową wartość. Osobiście preferuję tę metodę.

Zakończenie

Image Replacment jest bardzo prostą techniką używaną przez projektantów stron www, ale jest bardzo przydatna. Zamiast dodawać logo za pomocą img możemy dodać nagłówek h1 z nazwą strony. Chyba nie muszę mówić jakie przynosi to korzyści. :)

Autor wpisu: Łukasz Socha, dodany: 23.02.2012 10:18, tagi: internet

pobierz w .pdf(przeznaczone do wydruku)

Ostatnie tygodnie pokazały, jak ważnym kanałem komunikacji dla Polaków jest internet. Abstrahując od zamieszania i fali protestów spowodowanych przez próbę wprowadzenia ACTA, warto moim zdaniem przyjrzeć się jednej kwestii – konsultacjom społecznym.

Na łamach portalu DI została opublikowana lista „konsultantów” w sprawie umowy ACTA (jeszcze przed jej podpisaniem). Co ciekawe, jest tam zaledwie około 30 podmiotów i dla większości ACTA jest po prostu „na rękę” – jakoś zabrakło tam organizacji społecznych. Niestety problem braku konsultacji społecznych nad projektami ustaw jest coraz poważniejszy.

Zastanawia mnie jedna kwestia. Mianowicie dlaczego by nie wykorzystać potężnego narzędzia komunikacji, jakim jest internet, do łatwej i ogólnodostępnej debaty na linii władza ↔ obywatele. Przecież stworzenie portalu, gdzie można w przejrzysty sposób publikować projekty ustaw wraz z możliwością komentowania ich, nie jest zbytnio skomplikowane i kosztowne, raptem kilkanaście, kilkadziesiąt tysięcy złotych. Dzięki takiemu rozwiązaniu eksperci, politycy, ale i zwykli obywatele mieliby możliwość wymieniania się poglądami na dany temat.

Czy to nie byłaby w końcu prawdziwa demokracja, gdzie obywatele mają realny wpływ na stanowienie prawa? Obecny stan rzeczy niestety nie gwarantuje tego. Co z tego, że co 4 lata mamy możliwość głosowania w wyborach, jak w czasie kadencji zdecydowana większość obywateli nie ma zbytnio wpływu na sposób sprawowania władzy.

W dobie internetu tradycyjne konsultacje, jakie to Pan Premier zaproponował już po podpisaniu umowy ACTA, są po prostu archaiczne, bo chyba każdy się ze mną zgodzi, że nawet kilkaset zaproszonych do debaty osób nie może się wypowiadać w imieniu prawie 40 milionów obywateli…

Artykuł powstał dla Dziennika Internautów

Autor wpisu: zleek, dodany: 21.02.2012 09:36, tagi: php

W dniu wczorajszym na blogu PhpStorm została opublikowana informacja o przygotowaniu pierwszych publicznych buildów PhpStorm w wersji 4 i WebStorm w wersji 4. Ciekawsze zmiany zapowiedziane w wersji 4 to między innymi: zastosowanie silnik IntelliJ Platform 11.1, co ma wpłynąć na zwiększenie szybkości działania aplikacji a także ma poprawić wygląd interfejsu użytkownika wprowadzenie obsługi PHP [...]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.