function execute($request)
 {
     parent::execute($request);
     // check existence
     if ($this->currentCategoryObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCATEGORY);
         exit;
     }
     $cat_data = $this->currentCategoryObj->getData();
     $this->assign['category'] = $this->currentCategoryObj->getData4html();
     // permission check
     if (!$cat_data['can_read']) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCATEGORY);
         exit;
     }
     // auto-register
     if (!empty($this->mod_config['wraps_auto_register']) && @$cat_data['cat_vpath'][0] == '/') {
         $register_class = empty($this->mod_config['auto_register_class']) ? 'PicoAutoRegisterWraps' : $this->mod_config['auto_register_class'];
         require_once dirname(__FILE__) . '/' . $register_class . '.class.php';
         $register_obj = new $register_class($this->mydirname, $this->mod_config);
         $register_obj->registerByCatvpath($cat_data);
     }
     // contents
     $this->assign['contents'] = array();
     $contentObjs = $this->currentCategoryObj->getContents();
     foreach ($contentObjs as $contentObj) {
         $this->assign['contents'][] = $contentObj->getData4html();
     }
     // subcategories
     $categoryHandler = new PicoCategoryHandler($this->mydirname, $this->permissions);
     $subcategoryObjs = $categoryHandler->getSubCategories($request['cat_id']);
     foreach ($subcategoryObjs as $subcategoryObj) {
         $this->assign['subcategories'][] = $subcategoryObj->getData4html();
     }
     $breadcrumbsObj =& AltsysBreadcrumbs::getInstance();
     $this->assign['xoops_breadcrumbs'] = $breadcrumbsObj->getXoopsbreadcrumbs();
     $this->assign['xoops_pagetitle'] = $this->assign['category']['title'];
     // views (no views other than 'listcontents')
     $this->template_name = $this->mydirname . '_main_listcontents.html';
     $this->is_need_header_footer = true;
 }