Авторизация

UMI CMS Как вывести одним списком определенные (или все) альбомы в которых лежат фотографии

ЗАДАЧА: Если надо вывести одним списком все альбомы (album) в которых лежат фотографии (photo), без пустых альбомов.

Скачать исходники в архиве

Стандартные функции: и %photoalbum albums()% не подходят. Воспользуемся кастомной функцией:

public function get_album_is_photo($template = "default", $parent_element_id = 0, $limit = false, $ignore_paging = false, $is_index_view = false){
    list($template_album_block, $template_album_item) = def_module::loadTemplates("photoalbum/get_album_is_photo/".$template, "album_block", "album_item");
    
    $hierarchy = umiHierarchy::getInstance(); 

    $select = new selector('pages');
    $select->types('hierarchy-type')->name('photoalbum', 'album');
    $select->where('hierarchy')->page($parent_element_id)->childs(10);	
    if($is_index_view){
        $select->where('is_index_view')->isnotnull();
    }
    $select->where('permissions');
    //$select->limit($offset, $limit);
    
    $arr_parent_album = array();
    $block_arr = array();
    $items = array();
    
    foreach($select as $page){
        $page_id = $page->id;
        
        $arr_children = $hierarchy->getChildrenTree($page_id, false, true, 1, 47);
        
        $is_photo = false;
        foreach($arr_children as $child_id=>$val){
            $child_element = $hierarchy->getElement($child_id);
            
            if($child_element->getMethod() == 'photo'){
                $is_photo = true;
                break;
            }
        }
        if(!$is_photo){
            continue;
        }
        
        $arr_parent_album[] = $page_id;
        
    }
    
    $curr_page = (int) getRequest('p');
    if($ignore_paging) $curr_page = 0;
    $offset = $limit * $curr_page;
    
    if(($sz = sizeof($arr_parent_album)) > 0) {
        for($i = 0; $i < $sz; $i++) {
            if($i < $offset) continue;
            if($i >= $offset + $limit ) break;
            
            $page_id = $arr_parent_album[$i];
            $page_element = $hierarchy->getElement($page_id);
            
            $item_arr = array();
            $item_arr['attribute:id'] = $page_id;
            $item_arr['attribute:link'] = $page_element->link;
            $item_arr['attribute:name'] = $page_element->name;
            
            $items[] = def_module::parseTemplate($template_album_item, $item_arr, $page_id);
            $hierarchy->unloadElement($page_id);
        }
    }
    $block_arr['subnodes:items'] = $items;
    $block_arr['total'] = count($arr_parent_album);
    $block_arr['per_page'] = $limit;
    return def_module::parseTemplate($template_album_block, $block_arr);
}

Создаём в папке tpls/photoalbum папку get_album_is_photo. В нём нужно обработать блоки album_block и album_item.


$FORMS = Array();
$FORMS['album_block'] = <<
%items%
END;

$FORMS['album_item'] = <<
%link% :: 
%id% :: 
%name%
END;

[ Saitadmin.ru || с 2006 по текущий год || Санкт-Петербург || Антон Панченко ]