[eluser]kRON[/eluser]
Thanks crumpet, works like a charm! So I guess that wraps it up, factory patterns are the way to go.
Just in case someone bumps into the same problem, here is my quick 'n dirty test Model forwarding custom objects
Code:
class Twitter extends Model {
private $dom;
private $data;
private $screen_name;
private $author_image;
function Twitter() {
parent::Model();
$this->load->helper('rest_request');
# Create DOMDocument from XML
$this->dom = new DOMDocument();
$this->dom->load(rest_request('http://twitter.com/statuses/user_timeline/kron_.xml?count=5', 'document', 300));
# Fetch screen name and image
$node = $this->dom->getElementsByTagName('status')->item(0)->getElementsByTagName('user')->item(0);
$this->author_image = $node->getElementsByTagName('profile_image_url')->item(0)->nodeValue;
$this->screen_name = $node->getElementsByTagName('screen_name')->item(0)->nodeValue;
}
public function get_latest() {
$result = array();
$statuses = $this->dom->getElementsByTagName('status');
foreach ($statuses as $status) {
$result [] = new Twit(
$status->getElementsByTagName('text')->item(0)->nodeValue,
$status->getElementsByTagName('created_at')->item(0)->nodeValue,
$status->getElementsByTagName('source')->item(0)->nodeValue
);
}
return $result;
}
public function get_screen_name() {
return $this->screen_name;
}
public function get_author_image() {
return $this->author_image;
}
}
class Twit {
private $text;
private $date;
private $source;
public function Twit($text, $date, $from) {
$this->text = $text;
$this->date = format_date($date);
$this->from = $from;
}
private function format_date($date) {
// TODO format date
return $date;
}
# Twit HTML render
public function get_data() {
// TODO format output
return '<p class="twitter-text">' . $this->text . '</p>';
}
}