Кнопка "Мои Закладки" для всех, в т.ч. и для гостей

Добавляет кнопку "добавить в избранное" для гостей.
Если есть аккаунт, а пользователь не залогинен,
избранные новости добавленные под "Гостем"
прибавятся к тем что на акаунте после того как "Гость" залогинится
Добавляет кнопку "добавить в избранное" для гостей.
Если есть аккаунт, а пользователь не залогинен,
избранные новости добавленные под "Гостем"
прибавятся к тем что на акаунте после того как "Гость" залогинится

тестировал на чистом дле 9.3, шаблон Default



1.открываем
\engine\modules\sitelogin.php


(примерно 49 строка) после:

        $member_id = $db->super_query( "SELECT * FROM " . USERPREFIX . "_users where name='{$_POST['login_name']}' and password='" . md5( $_POST['login_password'] ) . "'" );
        
        if( $member_id['user_id'] ) {
    


добавить:

            // start || избранное для гостей
            if(isset($_COOKIE['fav_news'])){
                $login_fav_news = explode(',',$member_id['favorites']);
                $cooki_fav_news = explode(',',$_COOKIE['fav_news']);
                
                
                $login_fav_news_res = array();
                foreach($cooki_fav_news as $val){
                    if(!in_array($val, $login_fav_news)) $login_fav_news_res[] = $val;
                }
                
                $member_id['favorites'] = implode(',', $login_fav_news);
                
                $db->query( "UPDATE " . USERPREFIX . "_users set favorites='{$member_id['favorites']}' WHERE user_id='{$member_id[user_id]}'" );
                
                set_cookie( "fav_news", '', 0 );
            }        
            // end || избранное для гостей


2. открываем
\engine\modules\show.short.php, \engine\modules\show.full.php, \engine\modules\show.custom.php


находим такие строки

if( $is_logged ) {
        
        $fav_arr = explode( ',', $member_id['favorites'] );
            
        if( ! in_array( $row['id'], $fav_arr ) or $config['allow_cache'] == "yes" ) $tpl->set( '{favorites}', "<a id=\"fav-id-" . $row['id'] . "\" href=\"$PHP_SELF?do=favorites&amp;doaction=add&amp;id=" . $row['id'] . "\"><img src=\"" . $config['http_home_url'] . "templates/{$config['skin']}/dleimages/plus_fav.gif\" onclick=\"doFavorites('" . $row['id'] . "', 'plus'); return false;\" title=\"" . $lang['news_addfav'] . "\" style=\"vertical-align: middle;border: none;\" alt=\"\" /></a>" );
        else $tpl->set( '{favorites}', "<a id=\"fav-id-" . $row['id'] . "\" href=\"$PHP_SELF?do=favorites&amp;doaction=del&amp;id=" . $row['id'] . "\"><img src=\"" . $config['http_home_url'] . "templates/{$config['skin']}/dleimages/minus_fav.gif\" onclick=\"doFavorites('" . $row['id'] . "', 'minus'); return false;\" title=\"" . $lang['news_minfav'] . "\" style=\"vertical-align: middle;border: none;\" alt=\"\" /></a>" );

        $tpl->set( '[complaint]', "<a href=\"javascript:AddComplaint('" . $row['id'] . "', 'news')\">" );
        $tpl->set( '[/complaint]', "</a>" );
    
    } else {
        $tpl->set( '{favorites}', "" );
        $tpl->set_block( "'\\[complaint\\](.*?)\\[/complaint\\]'si", "" );
    }


и меняем их на:


        // start || избранное для гостей
        if( $is_logged ) {
            
            $fav_arr = explode( ',', $member_id['favorites'] );
            
            $tpl->set( '[complaint]', "<a href=\"javascript:AddComplaint('" . $row['id'] . "', 'news')\">" );
            $tpl->set( '[/complaint]', "</a>" );
        
        } else {
            
            $fav_arr = explode( ',', $_COOKIE['fav_news'] );
            
            $tpl->set_block( "'\\[complaint\\](.*?)\\[/complaint\\]'si", "" );
        }        
        
            if( ! in_array( $row['id'], $fav_arr ) or $config['allow_cache'] == "yes" ) $tpl->set( '{favorites}', "<a id=\"fav-id-" . $row['id'] . "\" href=\"$PHP_SELF?do=favorites&amp;doaction=add&amp;id=" . $row['id'] . "\"><img src=\"" . $config['http_home_url'] . "templates/{$config['skin']}/dleimages/plus_fav.gif\" onclick=\"doFavorites('" . $row['id'] . "', 'plus'); return false;\" title=\"" . $lang['news_addfav'] . "\" style=\"vertical-align: middle;border: none;\" alt=\"\" /></a>" );
            else $tpl->set( '{favorites}', "<a id=\"fav-id-" . $row['id'] . "\" href=\"$PHP_SELF?do=favorites&amp;doaction=del&amp;id=" . $row['id'] . "\"><img src=\"" . $config['http_home_url'] . "templates/{$config['skin']}/dleimages/minus_fav.gif\" onclick=\"doFavorites('" . $row['id'] . "', 'minus'); return false;\" title=\"" . $lang['news_minfav'] . "\" style=\"vertical-align: middle;border: none;\" alt=\"\" /></a>" );
        // end || избранное для гостей


3. открываем
\engine\init.php

(примерно 337 строка) после:

$tpl->set( '{all-pm}', $member_id['pm_all'] );

добавляем:

            // start || избранное для гостей
            $count_fav_news = ( $member_id['favorites'] !='' ) ?  count(explode("," , $member_id['favorites'])) : '&nbsp;';
            $tpl->set( '{favorite-count}',   ' <span id="count_fav_news">'. $count_fav_news .'</span>'  );    
            // end || избранное для гостей
            


тутже (строка примерно 347) удаляем за ненадобностью строки:

if ($member_id['favorites']) {
    $tpl->set( '{favorite-count}', count(explode("," ,$member_id['favorites'])) );
}
else $tpl->set( '{favorite-count}', '0' );




4.открываем
\engine\classes\js\dle_js.js


и заменяем функцию

function doFavorites(a,b){ShowLoading("");$.get(dle_root+"engine/ajax/favorites.php",{fav_id:a,action:b,skin:dle_skin},function(b){HideLoading("");$("#fav-id-"+a).html(b)});return!1}

на


function doFavorites( id, event )
{
    ShowLoading('');

    $.post(dle_root +"engine/ajax/fav.php", { id: id, action: event }, function(a){

        HideLoading('');
        
        $("#fav-id-" + id).html(a);
        
        $.post(dle_root +"engine/ajax/favlink.php", { id: id }, function(b){
            $('#favlink').html(b);
        });            
        
        $.post(dle_root +"engine/ajax/favcount.php", { id: id }, function(c){
            $("#count_fav_news").html(c);
        });
        
    });

    return false;
};


5. заливаем 3-а файла из архива:

\engine\ajax\fav.php
\engine\ajax\favcount.php
\engine\ajax\favlink.php


6. открываем файл:
index.php


(примерно 47 строка )и после:
[/code]
$tpl->set ( '{speedbar}', $tpl->result['speedbar'] );


добавить:

[code]
    // start || избранное для гостей
    if((!$is_logged && isset($_COOKIE['fav_news']) && $_COOKIE['fav_news']!='') || ($is_logged && $member_id['favorites']!='') ){
        
        $favnews_link = ($config['allow_alt_url'] == "yes") ? $config['http_home_url'].'favorites/' : $config['http_home_url'] . "index.php?do=favorites";
        
        $fav_count = ( $is_logged ) ? count(explode( ',', $member_id['favorites'] )) : count(explode( ',', $_COOKIE['fav_news'] ));
        
        $fav_count = ($fav_count >=1) ? ' <span id="favcontlink">'.$fav_count.'</span>' : '<span id="favcontlink">&nbsp;</span>';
        
        $tpl->set ( '{favnews-link}', '<li id="favlink"><a href="'. $favnews_link .'"><b>'. $lang['title_fav']. $fav_count .'</b></a></li>' );
    } else $tpl->set ( '{favnews-link}', '<li id="favlink">&nbsp;</li>' );
    // end || избранное для гостей



7.открываем файл:
/engine/engine.php

(примерно 84 строка) ищём:

    case "favorites" :
        if ($is_logged) {
            
            $config['allow_cache'] = false;
            
            include ENGINE_DIR . '/modules/favorites.php';
        
        } else
            msgbox ( $lang['all_err_1'], $lang['fav_error'] );
        break;


и меняем на:

    case "favorites" :
            
        $config['allow_cache'] = false;
            
        include ENGINE_DIR . '/modules/favorites.php';

        break;



8.открываем файл:
\engine\modules\favorites.php

(примерно 79 строка)ищем:

    $list = explode( ",", $member_id['favorites'] );


заменить на:

    // start || избранное для гостей
    $list = ($is_logged) ? explode(",", $member_id['favorites']) : explode(',', $_COOKIE['fav_news']);
    // end || избранное для гостей


9. в шаблонах
shortstory.tpl, fullstory.tpl


вынимаем
{favorites}
из тегов
[not-group=5] ... [/not-group]



10. открываем файл:
\language\Russian\website.lng

(примерно 316 строка) ищем и удаляем строку:


'fav_error'        =>    "Данный раздел доступен только зарегистрированным пользователям",


т.к. Данный раздел доступен абсолютно всем, и эта строка перевода нигде не используеться


архив качать тут favorites_files.rar [53,31 Kb] (cкачиваний: 30)

Всё.

П.С.: если хочется увидеть в действии не прописывая ничего - в архиве есть все файлы с необходимыми прописями что-бы залить для установки на ЧИСТЫЙ движок.
П.П.С.: категорически не рекомендую заливать все файлы из архива на рабоющий ресурс, иначе П.П.С. плавно перейдёт в П.П.Ц. ... ;)
Другие новости по теме:

Категория: Хаки ----- Просмотров: 1550 ----- Комментариев: 2

Вернуться

  • demix

  • 10 августа 2011 00:04
  • Группа: User
  • ICQ: --
  • Регистрация: 27.07.2008
  • Комментариев: 7
  • Публикаций: 2
^

добавил проверку куки...
все изменения в обновлённом архиве пункты 1, 8 и поправил пункт 3 (для лучшей ясности)

все файлы, изменения и описание в архиве

http://depositfiles.com/files/z4fs46zaz


в 1-м пункте описания я допустил опечатку,
файлы же в полном порядке...
поэтому настоятельно рекомендую скачать и установить
обновлённый архив и ознакомиться с обновлёным РИДМИ
  • NoID

  • 10 августа 2011 02:39
  • Группа: User
  • ICQ: --
  • Регистрация: 15.04.2011
  • Комментариев: 2
  • Публикаций: 0
^
Мне как раз такое нужно, спасибо. Будет время, поставлю, потестю.

--------------------