enum Felder mit cakephp auslesen

Dieser Code kommt in das app_model.php

/**
     * Get Enum Values
     * Snippet v0.1.3
     * http://cakeforge.org/snippet/detail.php?type=snippet&id=112
     *
     * Gets the enum values for MySQL 4 and 5 to use in selectTag()
     */
    function getEnumValues($columnName=null, $respectDefault=false) {
        if ($columnName==null) { return array(); } //no field specified

        //Get the name of the table
        $db =& ConnectionManager::getDataSource($this->useDbConfig);
        $tableName = $db->fullTableName($this, false);

        //Get the values for the specified column (database and version specific, needs testing)
        $result = $this->query("SHOW COLUMNS FROM {$tableName} LIKE '{$columnName}'");

        //figure out where in the result our Types are (this varies between mysql versions)
        $types = null;
        if     ( isset( $result[0]['COLUMNS']['Type'] ) ) { $types = $result[0]['COLUMNS']['Type']; $default = $result[0]['COLUMNS']['Default']; } //MySQL 5
        elseif ( isset( $result[0][0]['Type'] ) )         { $types = $result[0][0]['Type']; $default = $result[0][0]['Default']; } //MySQL 4
        else   { return array(); } //types return not accounted for

        //Get the values
        $values = explode("','", preg_replace("/(enum)\('(.+?)'\)/","\\2", $types) );

        if($respectDefault){
                $assoc_values = array("$default"=>Inflector::humanize($default));
                foreach ( $values as $value ) {
                        if($value==$default){ continue; }
                        $assoc_values[$value] = Inflector::humanize($value);
                }
        }
        else{
                $assoc_values = array();
                foreach ( $values as $value ) {
                        $assoc_values[$value] = Inflector::humanize($value);
                }
        }

        return $assoc_values;

    } //end getEnumValues

In dem Controller holt man sich die Werte dann so:

$this->set('value', $this->Model->getEnumValues('field'));

und in der View kommt das hinein:

echo $form->input('value', array('options' => $kind, 'label' => 'value:'));

die neuesten Einträge mit cakephp bekommen

function getNewest( $limit = 50 ) {
        $data = $this->find('all',
            array(
            'order' => $this->name .'.id DESC',
            'limit' => $limit)
        );
        return $data;
    }

A piece of information

gaza People in Palestine are trapped inside a Wall. “We are human beings, just like you, with a sense of humour, and lust for life”.The text on the image is inside the wall. No Photoshop.

gefunden auf: http://flowplayer.org/tools/release-notes/

15 CakePHP Tipps

nuts and bolts hat eine Liste mit einigen Tipps zu CakePHP zusammengestellt.
zu den Cake Tipps

URL splitten

function process_url( $url ) {
        $processed_url = parse_url( $url );
        $query_string = $processed_url[ 'query' ];
        $query_string = explode( '&', $query_string );
        $args = array( ); // return array
        foreach( $query_string as $chunk ) {
            $chunk = explode( '=', $chunk );
            if ( count( $chunk ) == 2 ) {
                list( $key, $val ) = $chunk;
                $args[ $key ] = urldecode( $val );
            }
        }
        return $args;
    }
$url = 'http://maps.google.de/maps?f=q&source=s_q&hl=de&geocode=&q=tiergarten,+berlin&sll=52.485699,13.348826&sspn=0.020071,0.045404&ie=UTF8&hq=&hnear=Tiergarten+Berlin&z=14';
$result = process_url( $url );
print_r( $result );

Pagination mit cakePHP erstellen

Auf der Seite von switchonthecode wird in einem Tutorial beschrieben wie die Pagination von cakePHP eingesetzt werden kann.

Zum Tutorial

CakePHP Ajax jQuery Helper

Bei loadsys wird beschrieben wie man mit einem Helper das Javascript Framework jQuery in cakePHP einsetzt.

Zum Tutorial

update: Es gibt einen neuen JQuery Ajax Helper

Login mit jQuery und CakePHP

auf hackthenet wird beschrieben, wie man einen Login mit Hilfe von jQuery und CakePHP erstellt.
zum Tutorial

Propelprojekt vorbereiten

Der propel Generator benötigt eine XML Datei um ein Datenbankschema zu erstellen. Diese heisst sinnigerweise dann auch schema.xml. Der Aufbau ist eigentlich selbsterklärend. Hier habe ich mal ein Beispiel von der propel Seite:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>

<database name="bookstore" defaultIdMethod="native">

 <table name="book" description="Book Table">
  <column name="book_id" type="integer" primaryKey="true" autoIncrement="true" required="true" description="Book Id"/>
  <column name="title" type="varchar" size="255" required="true" description="Book Title"/>
  <column name="isbn" type="varchar" size="24" required="true" phpName="ISBN" description="ISBN Number"/>
  <column name="publisher_id" type="integer" required="true" description="Foreign Key for Publisher"/>
  <column name="author_id" type="integer" required="true" description="Foreign Key for Author"/>
  <foreign-key foreignTable="publisher">
   <reference local="publisher_id" foreign="publisher_id"/>
  </foreign-key>
  <foreign-key foreignTable="author">
   <reference local="author_id" foreign="author_id"/>
  </foreign-key>
 </table>

 <table name="publisher" description="Publisher Table">
  <column name="publisher_id" type="integer" required="true" primaryKey="true" autoIncrement="true" description="Publisher Id"/>
  <column name="name" type="varchar" size="128" required="true" description="Publisher Name"/>
 </table>

 <table name="author" description="Author Table">
  <column name="author_id" type="integer" required="true" primaryKey="true" autoIncrement="true" description="Author Id"/>
  <column name="first_name" type="varchar" size="128" required="true" description="First Name"/>
  <column name="last_name" type="varchar" size="128" required="true" description="Last Name"/>
 </table>

</database>

Setzen der Build Konfiguration:
Um die Datenbank erstellen zu können braucht propel noch die Parameter für die Datenbankverbindung. Dafür erstellt man in seinem Projektverzeichnis eine build.properties Datei, die in etwa so aussieht:

# The name of the project
propel.project = bookstore

# The database driver
propel.database = sqlite

# The connection parameters (optional, but required if you want to initialize db)
#
# This is the PDO DSN (see online docs http://www.php.net/pdo for more info)
propel.database.url = sqlite:/path/to/bookstore.db
# Other examples:
# propel.database.url = mysql:host=localhost;dbname=test
# propel.database.url = pgsql:host=localhost dbname=db-name user=db-username password=db-password
#
# If you are using MySQL or Oracle, you will have to specify any username and password separately
# propel.database.user = db-user
# propel.database.password = db-password

Setzen der Laufzeit Konfiguration:
Die Laufzeitkonfiguration wird in der Applikation zum Konfigurieren der erzeugten Objekte benötigt. Zum Erzeugen der SQL und PHP Klassen wird sie nicht benötigt, aber sie wird in ein PHP freundliches Array übersetzt und deswegen ist es besser sie vor dem build zu erstellen.
Eine runtime-conf.xml mit folgender Struktur im Projektverzeichnis erstellen:

<?xml version="1.0" encoding="ISO-8859-1"?>

<config>
 <!-- Uncomment this if you have PEAR Log installed
 <log>
  <type>file</type>
  <name>/path/to/prople.log</name>
  <ident>propel-bookstore</ident>
  <level>7</level>
 </log>
 -->
 <propel>
  <datasources default="bookstore">
   <datasource id="bookstore"> <!-- this ID must match <database name=""> in schema.xml -->
    <adapter>sqlite</adapter> <!-- sqlite, mysql, myssql, oracle, or pgsql -->
    <connection>
     <dsn>sqlite2:/path/to/bookstore.db</dsn> <!-- the PDO connection DSN for database -->
    </connection>
   </datasource>
  </datasources>
 </propel>
</config>

Eine ausführliche Beschreibung ist hier

Propel installieren

Propel wird verwendet um Objekte mit Daten in einer Datenbank zu speichern. Es ist eine Schicht zwischen dem Datenspeicher und der Programmierlogik. Zunächst muss man Propel über den PEAR Installer installieren. Da Propel eine Abhängigkeit zu anderen PEAR Paketen enthält, muss man als erstes diese installieren. Dies geschieht über die Konsole. Wir fangen mit dem Log Paket an:

$ pear install Log

Propel wird PHP Code generieren und benötigt dazu das PHING Build Tool:

$ pear channel-discover pear.phing.info
$ pear install phing/phing

Jetzt brauchen wir noch Creole als Datenbankabstractionslayer und dann endlich Propel:

$ pear channel-discover pear.phpdb.org
$ pear install –alldeps phpdb/propel_generator
$ pear install –alldeps phpdb/propel_runtime

Wenn alles korrekt lief, kann man im “bin” Verzeichnis das Skript “propel-gen” ausführen. Ich würde vorschlagen, dass man den Pfad seiner PATH Variable hinzufügt.

Eine umfangreiche Installationsanleitung gibt es bei propel.phpdb.org