Jump to content

Recommended Posts

Добрый день уважаемые коллеги!

 

У меня на сайте есть в полной новости модуль похожие материалы.

 

Только он выводит всё подряд. А хотеось бы чтобы он всё таки выводил именно материалы из той же категории, а также из подкатегории, в которой находится сам материал.

 

вот полный код модуля, который отвечает за вывод похожих материалов.

 

Подскажите знающие люди где ошибка и как её исправить самостоятельно.

 

Заранее благодарю.

 

<?php
if (!defined('DATALIFEENGINE'))
    die("Go fuck yourself!");
$userName  = !empty($userName) ? $db->safesql(strip_tags(stripslashes($userName))) : false;
$myConfig  = array(
    'userName' => $userName,
    'catId' => !empty($catId) ? $catId : '1',
    'template' => !empty($template) ? $template : 'relatednews',
    'cachePrefix' => !empty($cachePrefix) ? $cachePrefix : 'rels3' . rand(100,100),
    'cacheSuffix' => !empty($cacheSuffix) ? true : false
);
$cacheName = md5(implode('_', $myConfig));
$myModule  = false;
$myModule  = dle_cache($myConfig['cachePrefix'], $cacheName . $config['skin'], $myConfig['cacheSuffix']);
if (!$myModule) {
    if (file_exists(TEMPLATE_DIR . '/' . $myConfig['template'] . '.tpl')) {
        if (!isset($tpl)) {
            $tpl      = new dle_template();
            $tpl->dir = TEMPLATE_DIR;
        } else {
            $tpl->result['myModule'] = '';
        }
    
        
         $xfound = true;
         $xfields = xfieldsload();
        
                 
            $row   = $db->query( "SELECT p.id, p.date, p.short_story, p.xfields, rating, news_read, p.comm_num, p.title, p.category, p.alt_name FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE p.approve=1 AND id!=".$igroneid." AND category IN (".$category_id.") ORDER BY  p.date DESC LIMIT 0,4" );
            
while ( $row = $db->get_row() ) {
    $now[$row['id']] = $row;
};


if(is_array($now)) {
    $tpl->load_template($myConfig['template'] . '.tpl');
    
    $tpl->copy_template = '<aside id="item_related" class="ignore-select"><div class="b_title">Похожие объявления</div><div class="list_items main_items">';
    $tpl->compile('myModule');
    
    foreach($now as $row) {
    
            $row['date'] = strtotime( $row['date'] );
    
            if( ! $row['category'] ) {
                $my_cat = "---";
                $my_cat_link = "---";
            } else {
                
                $my_cat = array ();
                $my_cat_link = array ();
                $cat_list = explode( ',', $row['category'] );
            
                if( count( $cat_list ) == 1 ) {
                    
                    $my_cat[] = $cat_info[$cat_list[0]]['name'];
                    
                    $my_cat_link = get_categories( $cat_list[0] );
                
                } else {
                    
                    foreach ( $cat_list as $element ) {
                        if( $element ) {
                            $my_cat[] = $cat_info[$element]['name'];
                            if( $config['allow_alt_url'] ) $my_cat_link[] = "<a href=\"" . $config['http_home_url'] . get_url( $element ) . "/\">{$cat_info[$element]['name']}</a>";
                            else $my_cat_link[] = "<a href=\"$PHP_SELF?do=cat&category={$cat_info[$element]['alt_name']}\">{$cat_info[$element]['name']}</a>";
                        }
                    }
                    
                    $my_cat_link = implode( ', ', $my_cat_link );
                }
                
                $my_cat = implode( ', ', $my_cat );
            }
    
            $row['category'] = intval( $row['category'] );
            
            if( $config['allow_alt_url'] ) {
                
                if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
                    
                    if( $row['category'] and $config['seo_type'] == 2 ) {
                        
                        $full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
                    
                    } else {
                        
                        $full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
                    
                    }
                
                } else {
                    
                    $full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
                }
            
            } else {
                
                $full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
            
            }
    
            if( date( 'Ymd', $row['date'] ) == date( 'Ymd', $_TIME ) ) {
                
                $tpl->set( '{date}', $lang['time_heute'] . langdate( ", H:i", $row['date'] ) );
            
            } elseif( date( 'Ymd', $row['date'] ) == date( 'Ymd', ($_TIME - 86400) ) ) {
                
                $tpl->set( '{date}', $lang['time_gestern'] . langdate( ", H:i", $row['date'] ) );
            
            } else {
                
                $tpl->set( '{date}', langdate( $config['timestamp_active'], $row['date'] ) );
            
            }
    
            $news_date = $row['date'];
            $tpl->copy_template = preg_replace_callback ( "#\{date=(.+?)\}#i", "formdate", $tpl->copy_template );
    
            $tpl->set( '{category}', $my_cat );
            $tpl->set( '{link-category}', $my_cat_link );
    
            $row['title'] = stripslashes( $row['title'] );
    
            $row['title'] = str_replace( "{", "{", $row['title'] );
    
            $tpl->set( '{title}', $row['title'] );
            
            if ( preg_match( "#\\{title limit=['\"](.+?)['\"]\\}#i", $tpl->copy_template, $matches ) ) {
                $count= intval($matches[1]);
    
                $row['title'] = strip_tags( $row['title'] );
    
                if( $count AND dle_strlen( $row['title'], $config['charset'] ) > $count ) {
                        
                    $row['title'] = dle_substr( $row['title'], 0, $count, $config['charset'] );
                        
                    if( ($temp_dmax = dle_strrpos( $row['title'], ' ', $config['charset'] )) ) $row['title'] = dle_substr( $row['title'], 0, $temp_dmax, $config['charset'] ). " ...";
                    
                }
    
                $tpl->set( $matches[0], $row['title'] );
    
            }
    
    
            $tpl->set( '{link}', $full_link );
    
            $row['short_story'] = stripslashes( $row['short_story'] );
    
            if( $user_group[$member_id['user_group']]['allow_hide'] ) $row['short_story'] = str_ireplace( "[hide]", "", str_ireplace( "[/hide]", "", $row['short_story']) );
            else $row['short_story'] = preg_replace ( "#\[hide\](.+?)\[/hide\]#ims", "<div class=\"quote\">" . $lang['news_regus'] . "</div>", $row['short_story'] );
    
            if (stripos ( $tpl->copy_template, "{image-" ) !== false) {
    
                $images = array();
                preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $row['short_story'], $media);
                $data=preg_replace('/(img|src)("|\'|="|=\')(.*)/i',"$3",$media[0]);
    
                foreach($data as $url) {
                    $info = pathinfo($url);
                    if (isset($info['extension'])) {
                        if ($info['filename'] == "spoiler-plus" OR $info['filename'] == "spoiler-plus" ) continue;
                        $info['extension'] = strtolower($info['extension']);
                        if (($info['extension'] == 'jpg') || ($info['extension'] == 'jpeg') || ($info['extension'] == 'gif') || ($info['extension'] == 'png')) array_push($images, $url);
                    }
                }
    
                if ( count($images) ) {
                    $i=0;
                    foreach($images as $url) {
                        $i++;
                        $tpl->copy_template = str_replace( '{image-'.$i.'}', $url, $tpl->copy_template );
                        $tpl->copy_template = str_replace( '[image-'.$i.']', "", $tpl->copy_template );
                        $tpl->copy_template = str_replace( '[/image-'.$i.']', "", $tpl->copy_template );
                    }
    
                }
    
                $tpl->copy_template = preg_replace( "#\[image-(.+?)\](.+?)\[/image-(.+?)\]#is", "", $tpl->copy_template );
                $tpl->copy_template = preg_replace( "#\\{image-(.+?)\\}#i", "{THEME}/dleimages/no_image.jpg", $tpl->copy_template );
    
            }
    
            $tpl->set( '{text}', $row['short_story'] );
    
            if ( preg_match( "#\\{text limit=['\"](.+?)['\"]\\}#i", $tpl->copy_template, $matches ) ) {
                $count= intval($matches[1]);
    
                $row['short_story'] = str_replace( "</p><p>", " ", $row['short_story'] );
                $row['short_story'] = strip_tags( $row['short_story'], "<br>" );
                $row['short_story'] = trim(str_replace( "<br>", " ", str_replace( "<br />", " ", str_replace( "\n", " ", str_replace( "\r", "", $row['short_story'] ) ) ) ));
    
                if( $count AND dle_strlen( $row['short_story'], $config['charset'] ) > $count ) {
                        
                    $row['short_story'] = dle_substr( $row['short_story'], 0, $count, $config['charset'] );
                        
                    if( ($temp_dmax = dle_strrpos( $row['short_story'], ' ', $config['charset'] )) ) $row['short_story'] = dle_substr( $row['short_story'], 0, $temp_dmax, $config['charset'] );
                    
                }
    
                $tpl->set( $matches[0], $row['short_story'] );
    
            }
    
            // Обработка дополнительных полей
            if( $xfound ) {
                $xfieldsdata = xfieldsdataload( $row['xfields'] );
                
                foreach ( $xfields as $value ) {
                    $preg_safe_name = preg_quote( $value[0], "'" );
    
                    if ( $value[6] AND !empty( $xfieldsdata[$value[0]] ) ) {
                        $temp_array = explode( ",", $xfieldsdata[$value[0]] );
                        $value3 = array();
    
                        foreach ($temp_array as $value2) {
    
                            $value2 = trim($value2);
                            $value2 = str_replace("'", "'", $value2);
    
                            if( $config['allow_alt_url'] ) $value3[] = "<a href=\"" . $config['http_home_url'] . "xfsearch/" . urlencode( $value2 ) . "/\">" . $value2 . "</a>";
                            else $value3[] = "<a href=\"$PHP_SELF?do=xfsearch&xf=" . urlencode( $value2 ) . "\">" . $value2 . "</a>";
                        }
    
                        $xfieldsdata[$value[0]] = implode(", ", $value3);
    
                        unset($temp_array);
                        unset($value2);
                        unset($value3);
    
                    }
            
                    if( empty( $xfieldsdata[$value[0]] ) ) {
                        $tpl->copy_template = preg_replace( "'\\[xfgiven_{$preg_safe_name}\\](.*?)\\[/xfgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template );
                        $tpl->copy_template = str_replace( "[xfnotgiven_{$value[0]}]", "", $tpl->copy_template );
                        $tpl->copy_template = str_replace( "[/xfnotgiven_{$value[0]}]", "", $tpl->copy_template );
                    } else {
                        $tpl->copy_template = preg_replace( "'\\[xfnotgiven_{$preg_safe_name}\\](.*?)\\[/xfnotgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template );
                        $tpl->copy_template = str_replace( "[xfgiven_{$value[0]}]", "", $tpl->copy_template );
                        $tpl->copy_template = str_replace( "[/xfgiven_{$value[0]}]", "", $tpl->copy_template );
                    }
                    
                    $xfieldsdata[$value[0]] = stripslashes( $xfieldsdata[$value[0]] );
    
                    if ( preg_match( "#\\[xfvalue_{$preg_safe_name} limit=['\"](.+?)['\"]\\]#i", $tpl->copy_template, $matches ) ) {
                        $count= intval($matches[1]);
            
                        $xfieldsdata[$value[0]] = str_replace( "</p><p>", " ", $xfieldsdata[$value[0]] );
                        $xfieldsdata[$value[0]] = strip_tags( $xfieldsdata[$value[0]], "<br>" );
                        $xfieldsdata[$value[0]] = trim(str_replace( "<br>", " ", str_replace( "<br />", " ", str_replace( "\n", " ", str_replace( "\r", "", $xfieldsdata[$value[0]] ) ) ) ));
            
                        if( $count AND dle_strlen( $xfieldsdata[$value[0]], $config['charset'] ) > $count ) {
                                
                            $xfieldsdata[$value[0]] = dle_substr( $xfieldsdata[$value[0]], 0, $count, $config['charset'] );
                                
                            if( ($temp_dmax = dle_strrpos( $xfieldsdata[$value[0]], ' ', $config['charset'] )) ) $xfieldsdata[$value[0]] = dle_substr( $xfieldsdata[$value[0]], 0, $temp_dmax, $config['charset'] );
                            
                        }
            
                        $tpl->set( $matches[0], $xfieldsdata[$value[0]] );
            
                    } else    $tpl->copy_template = str_replace( "[xfvalue_{$value[0]}]", $xfieldsdata[$value[0]], $tpl->copy_template );
    
                }
            }
                $tpl->set( '{news-id}', $row['id'] );
            // Обработка дополнительных полей
        $tpl->compile('myModule');
    };

    $tpl->copy_template = '</div></aside>';
    $tpl->compile('myModule');
    $tpl->clear();
}
        
        $myModule = $tpl->result['myModule'];
        create_cache($myConfig['cachePrefix'], $myModule, $cacheName . $config['skin'], $myConfig['cacheSuffix']);
        $tpl->clear();
    } else {
        $myModule = '<b style="color:red">Отсутствует файл шаблона: ' . $config['skin'] . '/' . $myConfig['template'] . '.tpl</b>';
    }
}
echo $myModule;
?>

Link to post
Share on other sites

у меня уже свой модуль есть - мне его надо исправить он и под дизайн уже запилен

вот только я не пойму куды тут закралась ошибка - так как в PHP я не особо силён поэтому и попросил помощи тут

Link to post
Share on other sites

А зачем эти танцы с бубном, если в штатных настройка DLE есть эта функция?

 

Настройка системы -> Настройки вывода новостей

 

Искать похожие публикации только в тех же категориях, что и сама новость
Если 'Да', то при поиске похожих новостей, будет учитываться категория к которой принадлежит публикация. И будут выводится только новости из такой же категории, или субкатегорий (если разрешен вывод новостей из субкатегорий). Если 'Нет', то будут искаться похожие публикации из всех категорий.
Link to post
Share on other sites
  • 2 weeks later...

А зачем эти танцы с бубном, если в штатных настройка DLE есть эта функция?

 

Настройка системы -> Настройки вывода новостей

 

Искать похожие публикации только в тех же категориях, что и сама новость

Если 'Да', то при поиске похожих новостей, будет учитываться категория к которой принадлежит публикация. И будут выводится только новости из такой же категории, или субкатегорий (если разрешен вывод новостей из субкатегорий). Если 'Нет', то будут искаться похожие публикации из всех категорий.

Согласен с вами, зачем писать руками то, что есть уже готовое давно. Еще в 9.х версиях вроди

Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...