Skip to content

Instantly share code, notes, and snippets.

@pragmaticivan
Created May 9, 2011 14:29
Show Gist options
  • Save pragmaticivan/962610 to your computer and use it in GitHub Desktop.
Save pragmaticivan/962610 to your computer and use it in GitHub Desktop.
Método findAll
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