Sup, mér fannst vanta smá líf í þetta áhugamál.

Hérna fyrir neðan getið þið séð klasa sem ég hef verið að nota mikið til að einfalda mér lífið þegar ég forrita vefsíður í Codeigniter.

<?php
/**
 * EModel
 * @author Egill Thorlaksson <eth@lanmot.is>
 * @desc Wrapper class to be extended by classes instead of CI_Model.
 *
 * Þessi class er notaður til að einfalda aðgerðir sem maður væri 
 * annars alltaf að skrifa ítrekað.
 */
class EModel extends CI_Model {
    /**
     * Smiðurinn tekur við tveimur færibreytum, annarsvegar $id og svo $column
     * ef $id er tómt þá gerir smiðurinn ekkert, annars sækir hann röð úr 
     * töflunni miðað við þær færibreytur sem honum eru færðar.
     * 
     * @param int $id
     * @param str $column 
     * @return void
     */
    public function __construct($id = NULL, $column = 'id') {
        if (is_numeric($id)) {
            $this->findById($id, $column);
        } elseif (!empty($id)) {
            $this->findBySlug($id, $column);
        }
        
        // Codeignter ætlast til þess að maður keyri þetta
        parent::__construct();
    }

    /**
     * Þetta function er notað til að skrá nýjar raðir eða uppfæra raðir.
     * Ef að $update er satt þá er uppfært annars er gert ráð fyrir að þetta sé 
     * ný röð og henni bætt við í töfluna.
     * 
     * @param bool $update
     * @return void
     */
    public function save($update = false) {
        foreach ($this->listFields() as $key => $field) {
            if(isset($this->$field)) {
                $data[$field] = $this->$field;
            }
        }

        if ($update) {
            $this->db->update($this->table, $data, array('id' => $this->result_set[0]->id));
            $this->feedback($data, true);
        } else {
            $this->db->insert($this->table, $data);
            $this->id = $this->db->insert_id();
        }
    }

    /**
     * Finna röð út frá $slug og $column
     * 
     * @param str $slug
     * @param str $column
     * @return void
     */
    public function findBySlug($slug, $column) {
        $result = $this->db->get_where($this->table, array($column => $slug));
        $this->result_set = $result->result();
    }

    /**
     * Finna allar raðir á núverandi object.
     * @param mixed $config
     *
     * array(
     *  where [key => value]
     *  order [by => value, direction => value]
     * );
     *
     * Ef $config er autt þá eru allar raðir sóttar
     * en hægt er að skilgreina nánar hvaða raðir á að sækja.
     * 
     * @return <stdClass>
     */
    public function findAll($config = NULL, $limit = NULL) {
        if(is_array($config['order'])) {
            $this->db->order_by($config['order']['by'], $config['order']['direction']);
        }

        if($limit !== NULL) {
            $this->db->limit($limit);
        }
        
        if(is_array($config['where'])) {
            $result = $this->db->get_where($this->table, array(
                $config['where']['key'] => $config['where']['value'],
            ));
        } else {
            $result = $this->db->get($this->table);
        }

        return $result->result();
    }

    /**
     * Finna röð útfrá $id
     * 
     * @param int $id
     * @param str $column
     * @return void
     */
    public function findById($id, $column) {
        $result = $this->db->get_where($this->table, array($column => $id));
        $this->result_set = $result->result();
    }

    /**
     * Functionin hér fyrir neðan eru notuð til að sækja 
     * upplýsingar um töflur eftir því sem á þarf að halda.
     */
    protected function listFields() {
        return $this->db->list_fields($this->table);
    }

    protected function listFieldsData() {
        return $this->db->field_data($this->table);
    }

    protected function fieldData($field) {
        return $this->db->field_data($field);
    }
}