Created
May 9, 2011 14:29
-
-
Save pragmaticivan/962610 to your computer and use it in GitHub Desktop.
Método findAll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public function findAll($options = array()){ | |
$defaults = array(); | |
$options = array_merge($defaults,$options); | |
$fields = "blogs.id, blogs.orelha, blogs.titulo, concat(blogs.slug,'.html') as slug, blogs.bigode, blogs.texto, blogs.fonte, | |
blogs.autor, blogs.data_hora, blogs.ext_arquivo, blogs.legenda, blogs.creditos, blogs.censurada, | |
blogs.video, blogs.comentarios, blogs.tags, blogs.ativo, blogs.hits, | |
blogs.ordem, imagens_areas.destaque, imagens_areas.legenda, imagens_areas.creditos, imagens_areas.imagens_id, | |
imagens.ext_arquivo, imagens.censurada,categorias.slug as slug_categoria, categorias.categoria as categoria_name, | |
categorias.id as id_categoria, categorias.ext_arquivo as imagem_categoria"; | |
if (isset($options['comments']) and $options['comments']) { | |
$fields .= " , count(comentarios.id) as count_comentarios "; | |
}; | |
$this->select($fields); | |
$joins = "LEFT JOIN imagens_areas | |
ON (imagens_areas.area = 'blogs' AND imagens_areas.area_id = blogs.id AND imagens_areas.destaque = true) | |
LEFT JOIN imagens | |
ON (imagens.id = imagens_areas.imagens_id) | |
LEFT JOIN categorias | |
ON (categorias.id = blogs.categoria_id) | |
"; | |
if (isset($options['comments']) and $options['comments']) { | |
$joins .= " | |
LEFT JOIN comentarios | |
ON (blogs.id = comentarios.id_area and comentarios.area = 'blogs' and comentarios.ativo = 1) | |
"; | |
}; | |
$this->join($joins); | |
$conditions = '1 = 1'; | |
if(isset($options['where'])) { | |
$conditions .= ' AND '.$options['where']; | |
} | |
if(isset($options['categoria'])) { | |
$conditions .= " AND categoria= '".$options['categoria']."'"; | |
} | |
if(isset($options['id'])) { | |
$conditions .= ' AND blogs.id = '.$options['id']; | |
} | |
$this->where($conditions); | |
if (isset($options['group'])) { | |
$this->group($options['group']); | |
} else { | |
$this->group('blogs.id'); | |
} | |
if(isset($options['rand'])) { | |
$order = ' ORDER BY RAND()'; | |
} | |
if(isset($options['order'])){ | |
$order = $options['order']; | |
} else { | |
$order = 'data_hora DESC'; | |
} | |
$this->order($order); | |
if(isset($options['limit'])) { | |
$this->limit($options['limit']); | |
} | |
$blogs = $this->all(); | |
if (!empty($blogs)) { | |
// Pega todos os ids dos produtos | |
$blogs_ids = array(); | |
foreach ($blogs as $blog) { | |
$blogs_ids[] = "'".$blog['id']."'"; | |
} | |
$blogs_ids = implode(',',$blogs_ids); | |
foreach ($blogs as $key => $value) { | |
$blogs[$key]['photos'] = array(); | |
$blogs[$key]['comments'] = array(); | |
} | |
$select_for_photos = " SELECT imagens_areas.area, imagens_areas.area_id, imagens_areas.legenda, imagens_areas.creditos, | |
imagens_areas.imagens_id, imagens.ext_arquivo | |
FROM imagens_areas | |
LEFT JOIN imagens ON (imagens.id = imagens_areas.imagens_id) | |
WHERE imagens_areas.area = 'blogs' | |
AND imagens.ativo = true | |
AND imagens_areas.area_id IN (".$blogs_ids.") | |
"; | |
$photos = $this->find_by_sql($select_for_photos); | |
if($photos != null) | |
foreach ($blogs as $key => $value) { | |
$blogs[$key]['photos'] = array(); | |
foreach ($photos as $photo) { | |
if($blogs[$key]['id'] === $photo['area_id']){ | |
$blogs[$key]['photos'][] = $photo; | |
} | |
} | |
} | |
// adiciona comentários | |
if(isset($options['comments']) && $options['comments'] === true) { | |
$select_for_comments = "SELECT * FROM comentarios | |
WHERE area = 'blogs' | |
AND id_area IN (".$blogs_ids.") | |
AND ativo = true | |
"; | |
$comments = $this->find_by_sql($select_for_comments); | |
if($comments != null) | |
foreach ($blogs as $key => $value) { | |
$blogs[$key]['comments'] = array(); | |
foreach ($comments as $comment) { | |
if($blogs[$key]['id'] === $comment['id_area']){ | |
$blogs[$key]['comments'][] = $comment; | |
} | |
} | |
} | |
} | |
} | |
if ( isset($options['aux_paginate']) and $options['aux_paginate']== true) { | |
//print_r($this); | |
return $this; | |
} else { | |
return $blogs; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment