nagovizin

скрыть контакты в объявлениях за "показать"

Recommended Posts

Здравствуйте, напишите во что и где завернуть код в шаблоне,чтобы была минимальная защита от парсинга контактов в объявлениях, либо ткните в уже имеющиеся ответы, спасибо.

З.ы.на алгоритмы защиты как на авит0 я не претендую:-) можно что нить банальное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

З.ы.на алгоритмы защиты как на авит0 я не претендую:-) можно что нить банальное.

Проще не показывать, все равно сопрут, универсальной защиты лично я не знаю (но могу и ошибаться)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно реализовать при помощи ajax подгрузки при клике по кнопке или ссылке "Показать".

Я не селен в  javascript и php, по этому прошу не пинать. Если уж банально, то можно как то так:

В файле realty_view.tpl вставляем

<script type="text/javascript">	
$(document).on('click', '.open-num-phone', function(event){		
	event.preventDefault();		
    var id='{$data.id.value}';			
    $.ajax({			
    {literal}				
    url: estate_folder+'/js/ajax.php',			
    data: {action: 'phone', id: id},			
    type: 'post',			
    dataType: 'text',			
    success: function(phone){				
    $("#realty_"+id).html("<img src='/template/frontend/default/img/preloader.gif' />");			    
    $("#realty_"+id).fadeOut(500, function(){			        
    	$(this).html(phone).fadeIn(500);			    
    });			
}			
{/literal}		
    });		
});
</script>
<div class="open-num-phone" id="realty_{$data.id.value}"> <a href="{$REQUEST_URI}">Показать телефон</a></div>

И в файле /apps/system/lib/system/ajax/ajax_server.php, где нибудь в конце функции main(), где то строка 1565, вставить примерно такой код

case 'phone':{    
$id=(int)$this->getRequestValue('id');    
$DBC=DBC::getInstance();    
$query='SELECT phone FROM '.DB_PREFIX.'_data WHERE id='.$id.'';    
$stmt=$DBC->query($query);    
$ar=$DBC->fetch($stmt);    
$result = $ar['phone'];    
echo $result;    
exit;    
break;}

Код конечно нужно еще доработать, но для начала этого должно хватить. И следует помнить, при обновлении cms, файл /apps/system/lib/system/ajax/ajax_server.php скорее всего перезапишется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И следует помнить, при обновлении cms, файл /apps/system/lib/system/ajax/ajax_server.php скорее всего перезапишется.

 

И вот для этого мы придумали принцип local ajax ))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И вот для этого мы придумали принцип local ajax ))))

 

Да, можно и принципом local ajax, вот только информации о реализации данного метода я не нашел, по этому и предложил такой вариант.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, можно и принципом local ajax, вот только информации о реализации данного метода я не нашел, по этому и предложил такой вариант.

Для этого достаточно положить ajax.php в /template/frontend/ваш_шаблон/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для этого достаточно положить ajax.php в /template/frontend/ваш_шаблон/

 

Из вашего описания ничего не понятно. Напомню, я не селен в php, по этому если ошибаюсь, поправьте меня. Если я правильно понимаю, то создание одного только файла ajax.php ничего не даст. Если смотреть как реализован ajax в системных файлах, то нужно еще и файл ajax_server.php, в котором уже и реализуется требуемый функционал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

внутри файла естественно должен быть код для обработки запроса и выдачи ответа.

Вы же уже написали этот код внутри case.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

кинул в /template/frontend/domikus файл ajax.php с содержанием 

 

 

 $id=(int)$this->getRequestValue('id');
    $DBC=DBC::getInstance();
    $query='SELECT phone FROM '.DB_PREFIX.'_data WHERE id='.$id.'';
 
    $stmt=$DBC->query($query);
    $ar=$DBC->fetch($stmt);
    $result = $ar['phone'];
 
    echo $result;
    exit;
    break;

после этого добавил в конце файла frontend/domikus/realty_view.tpl после всех дивов

 

<script type="text/javascript">

$(document).on('click', '.open-num-phone', function(event){
event.preventDefault();
var id='{$data.id.value}';
$.ajax({
{literal}
url: estate_folder+'/js/ajax.php',
data: {action: 'phone', id: id},
type: 'post',
dataType: 'text',
success: function(phone){
$("#realty_"+id).html("<img src='/template/frontend/default/img/preloader.gif' />");
   $("#realty_"+id).fadeOut(500, function(){
       $(this).html(phone).fadeIn(500);
   });
}
{/literal}
});
});
</script>
 
<div class="open-num-phone" id="realty_{$data.id.value}"> <a href="{$REQUEST_URI}">Показать телефон</a></div>

не заработало 

что сделал не правильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

кинул в /template/frontend/domikus файл ajax.php с содержанием 

после этого добавил в конце файла frontend/domikus/realty_view.tpl после всех дивов

 

не заработало 

что сделал не правильно?

 

В файл ajax.php нужно вставить код

<?php/** * Ajax server module * @author Kondin Dmitriy <kondin@etown.ru> http://www.sitebill.ru */error_reporting(0);//error_reporting(E_ALL);//ini_set('display_errors','On');session_start();$settings=parse_ini_file(SITEBILL_DOCUMENT_ROOT.'/settings.ini.php',true);if(isset($settings['Settings']['estate_folder'])AND($settings['Settings']['estate_folder']!='')){$folder='/'.$settings['Settings']['estate_folder'];}else{$folder='';}$estate_folder = $folder;global $home_url;$home_url = '';require_once(SITEBILL_DOCUMENT_ROOT."/inc/db.inc.php");if(!defined('SITE_ENCODING')){	define('SITE_ENCODING', 'windows-1251');}header('Content-Type: text/html; charset='.SITE_ENCODING);$sitebill_document_root = $_SERVER['DOCUMENT_ROOT'].$folder;define('SITEBILL_DOCUMENT_ROOT', $sitebill_document_root);define('SITEBILL_MAIN_URL', $folder);define('DB_PREFIX', $__db_prefix);ini_set("include_path", $include_path );require_once(SITEBILL_DOCUMENT_ROOT.'/third/smarty/Smarty.class.php');require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/system/init.php');require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/db/MySQL.php');require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/sitebill.php');require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/sitebill_krascap.php');require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/language/russian.php');require_once(SITEBILL_DOCUMENT_ROOT.'/template/frontend/domikus/ajax_server.php');$smarty = new Smarty;$init = new Init();$init->initGlobals();$ETOWN_LANG = new Etown_Lang;if(isset($_REQUEST['_lang'])){	$_SESSION['_lang']=$_REQUEST['_lang'];}else{	if(!isset($_SESSION['_lang'])){		$_SESSION['_lang']='ru';	}}require_once SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/system/multilanguage/multilanguage.class.php';Multilanguage::start('frontend',$_SESSION['_lang']);$sitebill = new SiteBill();$sitebill->writeLog('ajax');$smarty->template_dir = SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$sitebill->getConfigValue('theme');$smarty->cache_dir    = SITEBILL_DOCUMENT_ROOT.'/cache/smarty';$smarty->compile_dir  = SITEBILL_DOCUMENT_ROOT.'/cache/compile';$ajax_server = new Ajax_Server();$rs = $ajax_server->main();$sitebill->writeLog($rs);echo $rs;?>

Так же нужно создать файл ajax_server.php и в нем вставить код

<?php/** * Ajax server class * @author Kondin Dmitriy <kondin@etown.ru> http://www.sitebill.ru */class Ajax_Server extends SiteBill {    /**     * Construct     */    function __construct() {        $this->SiteBill();    }    /**     * Main     * @param void     * @return string     */    function main () {        switch ( $this->getRequestValue('action') ) {            case 'phone':{                $id=(int)$this->getRequestValue('id');                $DBC=DBC::getInstance();                $query='SELECT phone FROM '.DB_PREFIX.'_data WHERE id='.$id.'';                $stmt=$DBC->query($query);                $ar=$DBC->fetch($stmt);                $result = $ar['phone'];                echo $result;                exit;                break;                            }        }        $body = str_replace("\r\n", ' ', $body);        $body = str_replace("\n", ' ', $body);        $body = addslashes($body);        $rs = '{    "response":{        "to":"Tove",        "from":"Jani",        "body":"'.$body.'"    }}        ';        if ( $_REQUEST['callback'] != '' ) {            $rs = $_REQUEST['callback'].'('.$rs.')';        }        return $rs;    }}?>

На работоспособность не проверял, но если я правильно понял принцип вышеупомянутого local ajax, то должно работать.

 

Еще в файле realty_view.tpl в вставленном коде нужно заменить строчку url: estate_folder+'/js/ajax.php', на url: estate_folder+'/template/frontend/domikus/ajax.php',

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все не так))) Кажется я где-то показывал как делается локальный обработчик. Сейчас поищу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://www.etown.ru/s/topic/1944-приложение-blacklist/?p=20746

 

Вот человек буквально с языка снял.

 

Создавать файлы ajax.php со всей начинкой как в http://www.etown.ru/s/topic/2007-скрыть-контакты-в-объявлениях-за-показать/?p=21357 допустимо, но это появляется еще одна точка входа в приложение. Нам это практически никогда не нужно.

 

ПС. Я перечитал и понимаю, что понадобится более развернутая инструкция с наглядными примерами.))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все не так))) Кажется я где-то показывал как делается локальный обработчик. Сейчас поищу.

 

В таком случае в шаблоне agency.pay тоже реализовано все не так! За основу предложенного мною примера я брал файлы из этого шаблона, а там все реализовано именно так!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В таком случае в шаблоне agency.pay тоже реализовано все не так! За основу предложенного мною примера я брал файлы из этого шаблона, а там все реализовано именно так!

 

Ну так шаблон агенси.пей появился еще задолго до того, когда пользователи стали пробовать прикручивать свои штучки к движку.)))

Все нормально. Мы стараемся по максимуму добавлять более удобные способы адаптации кода, но и старые варианты приходится поддерживать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас