Вход Регистрация
Файл: adultscript-2.0.3-pro/files/modules/video/components/related.php
Строк: 85
<?php
defined
('_VALID') or die('Restricted Access!');
class 
VComponent_video_related extends VModule_video
{
    public function 
__construct()
    {
        
parent::__construct();
    }
    
    public function 
render()
    {
        
$query        VUri::query();
        
$video_id    = (isset($query['1'])) ? (int) $query['1'] : 0;
        
$page        = (isset($query['2'])) ? (int) $query['2'] : 1;
        
        
$url        'related/'.$video_id.'/';
        if (
$page !== && $page !== 1) {
            
$url .= $page.'/';
        }
        
        if (!
VUri::match($url)) {
            
VModule::load('404'TRUE);
        }
        
        
$this->db->query("SELECT v.video_id, v.title,
                                 GROUP_CONCAT(DISTINCT c.cat_id) AS categories,
                                 GROUP_CONCAT(DISTINCT t.name) AS tags
                          FROM #__video AS v
                          INNER JOIN #__video_category AS c ON (c.video_id = v.video_id)
                          INNER JOIN #__video_tags AS t ON (t.video_id = v.video_id)
                          WHERE v.video_id = "
.$video_id."
                          AND v.status = 1"
);
        if (
$this->db->affected_rows()) {
            
$video    $this->db->fetch_assoc();
        }
        
        if (!isset(
$video)) {
            
VModule::load('404'TRUE);
        }
        
        
VLanguage::load('frontend.video');
        
        
$related    = (VCfg::get('video.related_method') == 'simple')
                ? 
$this->get_related_simple($video_id$video['title'], $page)
                : 
$this->get_related_complex($video_id$video['tags'], $page);
        
        
$this->tpl->menu            'video';
        
        
$this->tpl->meta_title        __('related-meta-title', array(e($video['title'])));
        
$this->tpl->meta_desc        __('related-meta-desc', array(e($video['title']), $page$this->tpl->cfg['site_name']));        
        
$this->tpl->meta_keys        $video['tags'];
        
        
$this->tpl->video            $video;
        
$this->tpl->related            $related['videos'];
        
$this->tpl->pagination        $related['pagination'];

        
$this->tpl->load(array('header''video_browse''footer'));
        
$this->tpl->display();    
    }

    private function 
get_related_simple($video_id$title$page)
    {
        
$title          $this->db->escape($title);
        
$sql_count      "SELECT COUNT(*) AS total_related
                             FROM #__video AS v
                           WHERE MATCH (v.title) AGAINST ('"
.$title."')
                             AND v.status = 1"
;
        
$total_videos    $this->db->get_field($sql_count'total_related');
        
$pagination        VPagination::get($page$total_videosVCfg::get('video.browse_per_page'));
        
$sql               "SELECT v.video_id, v.title, v.slug, v.rating, v.rated_by, v.duration, v.thumb,
                                  v.thumbs, v.total_views, v.add_time, v.ext, v.hd, v.premium, u.username,
                                  MATCH (v.title) AGAINST ('"
.$title."') AS relevance
                             FROM #__video AS v
                             LEFT JOIN #__user AS u ON (u.user_id = v.user_id)
                             WHERE MATCH (v.title) AGAINST ('"
.$title."')
                           AND v.status = 1
                           AND v.video_id != "
.$video_id."
                           ORDER BY relevance DESC
                           LIMIT "
.$pagination['limit'];
        return array(
              
'videos'        => $this->db->get_rows($sql),
              
'pagination'    => $pagination
        
);
    }

    private function 
get_related_complex($video_id$tags$title)
    {
        
$host   VF::cfg_item('sphinx_host');
        
$port   VF::cfg_item('sphinx_port');
        if (empty(
$host) OR empty($port)) {
            throw new 
VException('Please set your sphinx search engine host and port!');
        }
        
        
$per_page    VCfg::get('video.browse_per_page');
        
$offset     = ($page >= 2) ? (($page 1) * $browse_per_page) : 0;
        
        
VF::load('sphinxapi.sphinxapi');
        
$sphinx     = new SphinxClient();
        
$sphinx->SetServer($host$port);
        
$sphinx->SetConnectTimeout(1);
        
$sphinx->SetFieldWeights(array('tags' => 100'title' => 70'description' => 30));
        
$sphinx->SetFilter('video', array($video_id), true);
        
$sphinx->SetMatchMode(SPH_MATCH_ANY);
        
$sphinx->SetLimits($offset$per_page$offset+$per_page);

        
$tags       str_replace(','' 'VText::truncate_words($tags40''));
        
$results    $sphinx->Query($tags'videos');

        if (isset(
$results['total']) && isset($results['matches'])) {
            
$ids    implode(','array_keys($results['matches']));
            
$sql    "SELECT v.video_id, v.title, v.slug, v.rating, v.rated_by, v.duration, v.thumb,
                              v.thumbs, v.total_views, v.add_time, v.ext, v.hd, v.premium, u.username
                       FROM #__video AS v
                       LEFT JOIN #__user AS u on (u.user_id = v.user_id)
                       WHERE v.video_id IN ("
.$ids.")
                       ORDER BY FIELD (v.video_id, "
.$ids.")";
            return array(
                
'pagination' => VPagination::get($page$results['total_found'], $per_page),
                
'videos'     => $this->db->get_rows($sql)
            );
        }
        
        return array(
              
'pagination'     => array(),
              
'videos'         => array()
          );
    }    
}
Онлайн: 0
Реклама