On 26-11-2010 11:34, Bertel Lund Hansen wrote:
> Martin skrev:
>
>> Forstil dig at hver række type i databasen har sin egen klasse, men man
>> godt vil have fx. et datetime felt til at kunne opføre sig som et date
>> felt, så man ikke skal vælge tid, men kun dato.
>
> Det ville jeg lave som en overstyret klasse:
Først bliver der automatisk lavet et Datetime object (dette kører
automatisk, da den hiver oplysningerne direkte fra databasen)
Men når man har fx. et timestamp, datetime felt - så er det jo ikke
altid man vil have den til at vise dato og tidsvælger i HTML'en, men kun
vise dato.
Derfor så skal klassen "omskrives" til at være et Date object istedet
Derfor ville
$obj = new Datetime;
$obj->actAs('date'); // Outputs Date object
ville være helt perfekt og det jeg ønsker - hvis muligt :)
Men måske vil ordet "Advanced Search" kan give et hint til hvad det
egentlig er jeg har inde i mit lille hoved :)
>
> class Date {
> function Date ($dt) { ... }
> }
> class Date {
> function Date ($dt,$hr,$mn,$sc) { ... }
> }
>
> men det kan man måske ikke i PHP?
Jo det kan man godt - eller rettere man kan ikke have 2 klasser med
samme navn
>
>> Kig fx på Zend_Form hvor hvert input type har sin egen klasse, men nogle
>> gange så vil man jo gerne have et tekstfelt til at være et datofelt fx.
>
> Hm. Jeg ville ikke blande dem sammen. Kan du ikke nedarve
> tekstfeltegenskaberne til en datofeltklasse?
Det gør jeg skam også
class Advancedsearch_Field_Datetime
extends Advancedsearch_Field_Date
{
protected $class = __CLASS__;
// Ingen $methods her, da den bruger $methods fra Date
/*
MEN, når man så i HTML'en vælger denne type felt, så skal der jo også
komme en time:minut felt op - men man vil jo også gerne have at det ikke
er alle datetime felter der skal komme op med time:minut, men kun med
dato vælger - så her bruger jeg så actAs() for at sige den skal være et
Date (eller det kunne i for sig være et enum felt istedet, det kan man
jo selv vælge)
*/
}
class Advancedsearch_Field_Date
extends Advancedsearch_Field_Text
{
protected $class = __CLASS__;
protected $methods = array(
'is newer than' => '? > ?',
'is older than' => '? < ?'
);
}
class Advancedsearch_Field_Text
extends Advancedsearch_Field_Abstract
{
protected $class = __CLASS__;
protected $methods = array(
'contains' => '? LIKE "%?%"',
'starts with' => '? LIKE "?%"'
);
}
Så er hele koden til at bygge HTML, javascript, database kald osv. i
Abstract
Hvis du vil se hele koden eller rettere det jeg har nået indtil nu så
kan du følge mig på
https://github.com/lsv/Advanced-Search