Logger
bootstrap.php
1 2 3 4 5 6 7
| protected function _initLogger() {
$writer = new Zend_Log_Writer_Firebug();
$logger = new Zend_Log($writer);
Zend_Registry::set('logger', $logger);
} |
użycie
1
| Zend_Registry ::get('logger')->log($array, Zend_Log ::INFO); |
Database profiler
application.ini
1 2
| resources.db.params.profiler.enabled = true
resources.db.params.profiler.class = Zend_Db_Profiler_Firebug |
Linki:
http://www.firephp.org/Wiki/Libraries/ZendFramework
http://www.karolnowicki.pl/zend-framework/artykul/pokaz/prosty-profiler-bazy-danych-z-zend-i-firebug/
http://www.altcontroldelete.pl/artykuly/firebug-opis-mozliwosci-wtyczki-dla-przegladarki-mozilla-firefox/
Próbowałem zmienić domyślny format zwracania danych z bazy danych z tablicy na obiekty. Można zrobić to na kilka sposobów (o czym można poczytać w sieci) jednak zależało mi aby zrobić to w pliku konfiguracyjnym. Ciężko znaleźć informacje jak to zrobić – natomiast jest gdzieś ogólny przepis (link).
1
| resources.db.params.options.fetchMode = 5 |
wartość 5 odpowiada stałej Zend_Db::FETCH_OBJ lub PDO::FETCH_OBJ
Co dziwne ustawienie w/w parametru nie zadziała w objektach modelu dziedzicącego po Zend_Db_Table_Abstract; działa natomiast w obiektach wywołujących klasę Zend_Db_Table_Abstract() z ustawieniem domyślnych parametrów
1
| Zend_Db_Table_Abstract::getDefaultAdapter(); |
Od razu ostrzegam, że nie ma sensu szukać rozwiązania tego problemu. Ktoś już się tym zainteresował (wysłał bug’a) – okazuje się że w klasie Zend_Db_Table_Abstract metoda odpowiedzialna za zwracanie wyników (_fetch()) ma na sztywno ustawiony typ zwracanych wyników na Zend_Db::FETCH_ASSOC.
„Błąd” ten nie zostanie poprawiony ponieważ spowoduje to błędne działanie innych elementów (np. Zend_Db_Table_Row).
tworzę plik _sidebar.phtml
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php
$this->placeholder('_right_sidebar')->captureStart() ?>
<h4>Sidebar1</h4>
tresc 1
<?php
$this->placeholder('_right_sidebar')->captureEnd() ?>
<?php
$this->placeholder('_left_sidebar')->captureStart() ?>
<h4>Sidebar2</h4>
tresc 2
<?php
$this->placeholder('_left_sidebar')->captureEnd() ?> |
Powyżej zostały utowrzone dwa placeholdery, których treść zawiera się miedzy metodami captureStart() a captureEnd()
Plik zapisałem w katalogu /views/scripts/sidebars/_sidebar.phtml. Katalog sidebars stworzyłem na potrzeby przechowywania elementów tego typu.
Następnie dodam plik zawierajacy placeholder do klasy widoku
1
| $this->view->render('sidebars/_sidebar.phtml'); |
w kontrolerze (dowolnym), lub
1
| $this->render('sidebars/_sidebar.phtml'); |
w pliku widoku (dokument .phtml)
Teraz należy umieścić placeholdery w odpowiednich miejscach na stronie. Do umieszczenia mam 2 helpery tego typu ‘_right_sidebar’ oraz ‘_left_sidebar’
1 2 3 4 5 6 7 8 9 10 11 12
| html... header... body ....
<div id="left">
<?php $this->placeholder('_left_sidebar') ?>
</div&>
<div id="center">
<?php echo $this->layout()->content ?>
</div>
<div id="right">
<?php $this->placeholder('_right_sidebar') ?>
</div>
.../body .../html |
Tags:
http://incubator.apache.org/thrift/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| if( !$this->um->isLoggedIn() ) {
$this->errors['general'] = 'Nie jesteś zalogowany.';
return FALSE;
}
$uz_id = $this->um->getId();
session_write_close();
error_reporting( 0 );
try {
$socket = new TSocket ('linaa2.hopto.org', 9090);
$transport = new TBufferedTransport ($socket, 1024, 1024);
$protocol = new TBinaryProtocol ($transport);
$client = new BVChatClient ($protocol);
$transport->open();
$cw_id = isset( $request['cw_id'] ) ? $request['cw_id'] : 0;
$result = array();
$lastEventId = $client->getLastEventId( $uz_id );
do {
$date_1 = new DateTime ();
$event = $client->getNextEvent( $uz_id, $cw_id );
if( $event !== NULL ) {
$cw_id = $event->eventId;
if( $event->eventType == BVChatEventType ::MESSAGE ) {
$message = $client->getMessage( $uz_id, $cw_id );
$date = new DateTime ( '@' . floor( $message->timestamp / 1000 ) );
$date_2 = new DateTime ();
$result[] = array(
'cw_id' =>; $cw_id,
'cw_od_uz_id' => $message->from,
'cw_do_uz_id' => $message->to,
'cw_data' => $date->format('Y-m-d H:i:s'),
'cw_data_1' => $date_1->format('Y-m-d H:i:s'),
'cw_data_2' => $date_2->format('Y-m-d H:i:s'),
'cw_tresc' => $message->message,
'duz_nazwa_od' => $message->from,
'duz_nazwa_do' => $message->to
);
}
}
} while( $event !== NULL && $event->eventType != BVChatEventType ::NOTHING && $cw_id < $lastEventId );
$transport->close();
} catch (TException $tx) {
if( $transport !== NULL && $transport->isOpen() ) {
$transport->close();
}
if( count( $result ) == 0) {
$this->errors['general'] = $tx->getMessage();
return FALSE;
}
}
error_reporting( E_ALL );
$this->results = $result;
return $this->results; |
Tags:
System zdalnej kontroli zleceń ATREUS jest moim pierwszym na wpół poważnym projektem programistycznym. System powstał początkowo jako projekt zaliczeniowy na jeden z przedmiotów na
studiach. Atreus powstał w oparciu o framework KohanaPHP. Na temat samego frameworka wypowiem sie w innym wątku.
System służy do kontroli zleceń – mianowicie wydruków wielkoformatowych, których swego czasu byłem sprzedawcą za pośrednictwem serwisu aukcyjnego Allegro.pl.
Atreus nie wymaga integracji z API serwsu Allegro. Wszelkie potrzebne dane wprowadzane są za pośrednicwem linku generowanego w automatycznej wiadomości po zakupie towaru. Do zadań kupującego należy tylko kliknąć w link.
Na dzień dzisiejszy nie przewiduje dalszego rozwoju Systemu, niemniej chcę wzorować na nim tutorial na temat programowania z wykorzystanie frameworka KohanaPHP, który mam nadzieję niedługo powstania na kartach niniejszej strony.
Tags:
Prosta strona – wizytówka firmy (w której swoją drogą pracowałem). Nastawiłem się na prostotę i oryginalnosć. Strona w całości oparta o HTML i CSS oraz drobne skrypty PHP obługujące zawartość.
Grafikę strony ograniczona do niezbędnego minimum w celu szybszego ładowania zawartości.
Generalnie nie było nawet okazji aby wykazać się jakoś szczególnie umiejętnościami programistycznymi.
Tak naprawdę strona powstała tylko dlatego, że już nie mogłem patrzeć na jej poprzednią wersję (którą też projektowałem) a jakby nie było strona jest nie tylko wizytówką firmy, którą prezentuje ale także jej projektanta
Tags: