Ответы в темах

Просмотр 15 ответов — с 1 по 15 (всего 32)
  • Автор helekopter

    (@helekopter)

    Вопрос решен. Вот рабочий код.

    // Подключаем Jquery и инициируем проверку на существования блока рекламы
     jQuery(document).ready(function($) {
     if ($.adblockJsFile === undefined){
    // Если блок не найден присваиваем статус true
    bar_blocked=true;
    } else {
    // Найден присваиваем статус true
    bar_blocked=false;
    }
    
    // Запускаем ajax
    jQuery.ajax({
    			type: "POST",
    			data: {
    // !Важно, указываем название функции php в которую необходимо передать данные
                    action: 'ad_blockit',
                    bar_blocked: bar_blocked,
    			},
    			dataType: "json",
    			url: "/wp-admin/admin-ajax.php",
    			success: function( response ) {
    		alert( response );
    	}
    		});
    });
    function ad_blockit() {
    // Получаем данные
    $blocker = $_POST['bar_blocked'];
    echo $blocker;
    // !Важно не забыть убить функцию.
    die();
    }
    // !Важно не забыть повесить эти 2 хука. Дабы wp не отправил 0 или пустой ответ
    add_action("wp_ajax_ad_blockit", "ad_blockit");
    add_action("wp_ajax_nopriv_ad_blockit", "ad_blockit");

    Вопрос для подумать. В чем отличие от стандартных (чит: правильных) вариантов решения

    Вверху я уже сказал, в чем отличие. В простоте, экономии места, в существовании лишь 1 темы.

    Если это без заморочек.. Столько всего нужно создать проверить обработать…
    //При этом напихать шаблоны темы условиями в которых потом разобраться будет не возможно (вместо того, что бы создать отдельные шаблоны для моб. версии) //

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

    Чем это отличается от is_mobile?

    Тем, что не все хотят использовать мобильную версию на своем смарт-устройстве из-за ее урезанной функциональности в пользу уменьшения трафика. А потому, есть прямая необходимость дать пользователю возможность выбора версий сайта. Поэтому я и искал решение при котором редирект на мобильную версию будет происходить 1 раз за сессию, дабы не брать на себя ответственность в принятии решение за пользователя.

    Звучит как риторический вопрос, но я все же отвечу. /?version=mobile, создаёт php request который перехватывается и передаётся для создания новой сессии. После чего, функция mobileview получает данные о текущей сессии и возвращает параметр (true), если мобильная сессия активна, что в свою очередь позволяет при помощи простого логического выражения типа: if(mobileview($on){wp_deregister_script (‘jquery’)} создать условие при котором во время инициированной мобильной сессии библиотека jquery подгружаться, не будет. Такое же условие можно создать для любой типовой функции внутри цикла wordpress, что в свою очередь позволяет иметь лишь одну активную тему без лишних заморочек. Как то так -)

    P.s в примере могут быть ошибки в названии функции, так как пишу с мобильного и по памяти.

    1. На поддомене\подкаталоге
    2. Подменой темы по определению ЮА.

    Может я конечно ошибаюсь из-за своей неопытности. Но если я правильно понимаю контекст первых двух пунктов, то из них следует, что мне необходимо создать второй шаблон темы поместив его в отдельную папку, с собственными archive.php, index.php, functioins.php и прочим, как например это сделано на wp-touch. Если я ошибаюсь, поправьте.

    3. Адаптивная вёрстка (media queries)

    Этот метод (конечно если htmlbook не врет) предполагает определения типа устройства и его разрешения средствами css и позволяет изменять только стили. Опять таки, поправьте если я ошибаюсь.

    Чего хотел я? Я хотел при помощи логических условий в своей родительской и !единственной теме, изменить логику работы wp (читай цикл) исключив ненужные элементы. Самое логичное решение этой проблемы, php session’s. Я не понимаю, почему Вы меня считаете идиотом, но с удовольствием послушаю Вашу аргументацию, если у Вас будет желание обсуждать эту тему.

    P.s проблему описываемую в данном топике — решил. Вот таким:

    if( !isset($_SESSION['version']) && wp_is_mobile()) {
       wp_redirect( '/?version=mobile' );
    exit;
    }

    незамысловатым способом, можно проверить была ли прежде инициирована сессия на мобильном устройстве и если ответ — отрицателен, перенаправить пользователя соответственно на моб. версию.

    В итоге полная механика переключения с мобильной версии на десктоп, реализована следующем методом:

    /*-- Переключение на мобильную версию сайта ссылкой --*/
     session_start(); // начинаем сессию, запонимая какой выбор сделал пользователь
     if (isset($_REQUEST['version'])) { // создаем перехват линка
            $_SESSION['version'] = $_REQUEST['version'];
    }
    function mobileview($on){ // создаем удобную функцию
    $on=$_SESSION['version'] == 'mobile';
    return $on;
    }
    if( !isset($_SESSION['version']) && wp_is_mobile()) {
       wp_redirect( '/?version=mobile' );
    exit;
    }

    В футере 2 ссылки:

    <?php	if (!mobileview($on)){ ?>
        <a href="http://109.254.129.121/?version=mobile">Мобильная версия</a>
    	<?php } if (mobileview($on)){ ?>
      <a href="http://109.254.129.121/?version=desktop">Полная версия</a> <?php } ?></span>

    .

    Сразу оговорюсь, код может быть грязным и некрасивым, писал исходя из своих знаний (а у меня их на данный момент не много). К тому же еще не до конца определился, будет ли (при определение смартфон пользователя впервые) лучшим вариантом использовать isset, empty или $_SESSION [‘session_name’] == »

    Спасибо всем за помощь -))

    О чём Вам уже неоднократно говорили.. Делали бы как советовали — уже 3 недели назад как забыли бы о костылях..

    Понимаете, дело в том, что любое из тех решений которые Вы предлагали,
    а именно:

    Всё правильно Вам кидают.
    Есть 3 варианта решения мобильной версии.
    1. На поддомене\подкаталоге
    2. Подменой темы по определению ЮА.
    3. Адаптивная вёрстка (media queries)

    wp_is_mobile это лишь условие, проверяющее мобильный ЮА или нет. Что дальше — зависит от фантазий

    Первые 2 способа решаются с пом. плагинов (если не считать отдельной установки), 3-й — вёрсткой темы.

    предполагало создания отдельной мобильной версии (зеркала), или манипулированием css media quaries, которые никак бы не смогли исключить «лишние» элементы из цикла wordpress. Решение с сессией, позволяет имея 1 шаблон адаптировать сайт абсолютно под все устройства так же исключая лишний трафик в виде ненужных js библиотек, лишнего css мусора и лишних изображений. А при учете, что в странах СНГ нет нормального lte повсеместно, это весьма уместное решение.

    P.s спасибо, что откликнулись =)

    vjpo, спасибо, но вы меня немного не так поняли. В вычисление размера окна браузера средствами php уже нет нужды (а надо мне это было, для исключения некоторых элементов в цикле wp). В данный момент, мне необходима просто функция которая позволяет при клике на ссылку переключать сайт в мобильный/текстовый вид. Зачем ссылка если есть media quaries? Все для того же, что бы исключить картинки и некие элементы сайты дабы таким образом уменьшить размер и время загрузки страницы. К сожалению не у всех есть быстрый безлимит…

    Благодарю всех, кто откликнется на помощь. Очень хотелось бы увидеть пример такой функции, что бы потом переработать под себя -) Еще раз спасибо -)

    Отчасти Вы конечно же правы, но в данном случае мне помогло обращение к google на английском -)

    Не поверите, до этого копался в нете около 3 часов в поисках ответа. Как только оставил пост, буквально через секунду наткнулся на нужную инфу.
    Всем кому интересно вот решение данной проблемы =)) Всем спасибо за внимание -)

    После долгих метаний по форумам, проблему решил таким условием

    function taqyeem_scripts_and_styles() {
    	if (is_single () && taqyeem_insert_review($content)){
    		wp_enqueue_script('taqyeem-main', plugins_url('js/tie.js' , __FILE__), array( 'jquery' ) , false , false );
    	}
    }
    add_action( 'wp_enqueue_scripts', 'taqyeem_scripts_and_styles' );

    Скрипт подключается только на странице архива и только там где есть вызов taqyeem_insert_review.

    Варианты с is_category; in_category; query_post(‘obzor’) и еже с ними, провалились, ибо скрипт подключался везде где есть хотя бы упоминание о этой категории. Помогло только двойное условие типа:
    if (is_single () && in_category(78)){}

    Pixelix, огромное спасибо Вам за то что натолкнули на поиск правильного решения =)

    P.s.s Кстати, может кто помнит условие по которому можно сделать вызов функции только на странице где есть комментарии =)

    Вот строение самого плагина (кусок кода отвечающий за вывод таблицы, за подгрузку скриптов и сам вид плагина)

    /*-----------------------------------------------------------------------------------*/
    # Register and Enquee plugin's styles and scripts
    /*-----------------------------------------------------------------------------------*/
    function taqyeem_scripts_styles(){
    	if( !is_admin()){
    		wp_register_style( 'taqyeem-style' , plugins_url('style.css' , __FILE__) ) ;
    		wp_enqueue_style( 'taqyeem-style' );
    		wp_register_script( 'taqyeem-main', plugins_url('js/tie.js' , __FILE__), array( 'jquery' ) , false , false );
    		wp_enqueue_script( 'taqyeem-main' );
    	}
    }
    add_action( 'init', 'taqyeem_scripts_styles' );
    
    /*-----------------------------------------------------------------------------------*/
    # Get Reviews Box
    /*-----------------------------------------------------------------------------------*/
    function taqyeem_get_review( $position = "review-top" ){
    
    	if( !is_singular() && taqyeem_get_option('taq_singular') ) return false;
    
    	global $post ;
    	$get_meta = get_post_custom($post->ID);
    	$criterias = unserialize( $get_meta['taq_review_criteria'][0] );
    	$title = $get_meta['taq_review_title'][0] ;
    	$summary = htmlspecialchars_decode( $get_meta['taq_review_summary'][0] );
    	$short_summary = $get_meta['taq_review_total'][0] ;
    	$style = $get_meta['taq_review_style'][0];
    
    	$image_style = taqyeem_get_option('rating_image');
    	if( empty($image_style) ) $image_style ='stars';
    
    	$total_score = $total_counter = $score = $ouput = 0;
    
    	if( taqyeem_get_option('allowtorate') != 'none' )
    		$users_rate = taqyeem_get_user_rate();
    	else $users_rate = '';
    
    	if( $style == 'percentage' ) $review_class = ' review-percentage'; elseif( $style == 'points' ) $review_class = ' review-percentage'; else $review_class = ' review-stars';
    	$ouput = '
    <div class="review_wrap" itemscope itemtype="http://schema.org/Review">
    	<div style="display:none" itemprop="reviewBody">'. wp_trim_words($post->post_content, 500 ) .'</div>
    	<div style="display:none" class="name entry-title" itemprop="name">'. get_the_title() .'</div>
    	<div style="display:none" class="entry-title" itemprop="itemReviewed" itemscope itemtype="http://schema.org/Thing"><span itemprop="name">'. get_the_title() .'</span></div>
    	<div style="display:none" class="updated">'. get_the_time( 'Y-m-d' ) .'</div>
    	<div style="display:none" class="vcard author" itemprop="author" itemscope itemtype="http://schema.org/Person"><strong class="fn" itemprop="name">'. get_the_author() .'</strong></div>
    
    	<meta itemprop="datePublished" content="'. get_the_time( 'Y-m-d' ) .'" />
    
    	<div id="review-box" class="review-box '. $position.$review_class.'">';
    	if( !empty($title) ){
    		$ouput .= '<h2 class="review-box-header">'.$title.'</h2>';
    	}
    
    	if( !empty($criterias) && is_array($criterias) ){
    		foreach( $criterias as $criteria){
    			if( $criteria['name'] && is_numeric( $criteria['score'] )){
    				if( $criteria['score'] > 100 ) $criteria['score'] = 100;
    				if( $criteria['score'] < 0 ) $criteria['score'] = 0;
    
    			$score += $criteria['score'];
    			$total_counter ++;
    			if( $style == 'percentage' ): $ouput .= '
    		<div class="review-item">
    			<span><h3>'. $criteria['name'] .' - '. $criteria['score'] .'%</h3><span data-width="'. $criteria['score'] .'"></span></span>
    		</div>';
    		elseif( $style == 'points' ):   $point =  $criteria['score']/10;
    		$ouput .= '	<div class="review-item">
    			<span><h3>'. $criteria['name'] .' - '. $point.'</h3><span data-width="'. $criteria['score'] .'"></span></span>
    		</div>';
    		else:
    		$ouput .= '<div class="review-item">
    			<h3>'. $criteria['name'] .'</h3>
    			<span class="post-large-rate '.$image_style.'-large"><span style="width:'. $criteria['score'] .'%"></span></span>
    		</div>';
    		endif;
    			}
    		}
    	}
    		if( !empty( $score ) && !empty( $total_counter ) )
    			$total_score =  $score / $total_counter ;
    		$ouput .= '
    		<div class="review-summary" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
    		<meta itemprop="worstRating" content = "1" />
    		<meta itemprop="bestRating" content = "100" />
    		<span class="rating points" style="display:none"><span class="rating points" itemprop="ratingValue">'. round($total_score) .'</span></span>';
    		if( $style == 'percentage' ):
    		$ouput .= '
    			<div class="review-final-score">
    				<h3>'. round($total_score) .'<span>%</span></h3>
    				<h4>'. $short_summary .'</h4>
    			</div>';
    		elseif( $style == 'points' ): $total_score = $total_score/10 ;
    		$ouput .= '
    			<div class="review-final-score">
    				<h3>'. round($total_score,1).'</h3>
    				<h4>'. $short_summary .' </h4>
    			</div>';
    		else:
    		$ouput .= '
    			<div class="review-final-score">
    				<span title="'. $short_summary .'" class="post-large-rate '.$image_style.'-large"><span style="width:'. $total_score .'%"></span></span>
    				<h4>'. $short_summary .'</h4>
    			</div>';
    		endif;
    		if( !empty( $summary ) ){
    			$ouput .= '
    			<div class="review-short-summary" itemprop="description">
    				<p>'. $summary .'</p>
    			</div>';
    		}
    			$ouput .= '
    		</div>'.$users_rate.'
    		<span style="display:none" itemprop="reviewRating">'. round($total_score) .' </span>
    	</div>
    
    </div>';
    
    	return $ouput ;
    }
    
    /*-----------------------------------------------------------------------------------*/
    # Get Reviews Box
    /*-----------------------------------------------------------------------------------*/
    function taqyeem_insert_review($content) {
    	global $post;
    
    	if( is_feed() ) return $content;
    
    	$get_meta = get_post_custom($post->ID);
    	if( !empty( $get_meta['taq_review_position'][0] ) )	$review_position = $get_meta['taq_review_position'][0] ;
    	$output = $output2 = '';
    	if( !empty( $review_position ) &&  $review_position == 'top'  ) $output =  taqyeem_get_review('review-top');
    	if( !empty( $review_position ) &&  $review_position == 'bottom' ) $output2 = taqyeem_get_review('review-bottom');
    
    	return $output.$content.$output2;
    }
    add_filter ('the_content', 'taqyeem_insert_review');

    Я пытался сделать это разными способами вот 3 из них.

    1.

    if( taqyeem_get_review()){
    		wp_register_script( 'taqyeem-main', plugins_url('js/tie.js' , __FILE__), array( 'jquery' ) , false , false );
    		wp_enqueue_script( 'taqyeem-main' );
    	}

    непонятно почему но подгружает скрипт на всех страницах блога, даже на главной, где упоминания о get_review даже нету.

    2.

    function taqyeem_onload(){
    if( is_category('obzor')){
    		wp_register_script( 'taqyeem-main', plugins_url('js/tie.js' , __FILE__), array( 'jquery' ) , false , false );
    		wp_enqueue_script( 'taqyeem-main' );
    	}
    	} add_action ('wp_head' 'taqyeem_onload')

    так же безуспешно. Скрипт не подгружается вообще нигде. То же самое если я размещаю условие не при помощи хука, а вручную в head.

    3.

    if( is_singular()){
    		wp_register_script( 'taqyeem-main', plugins_url('js/tie.js' , __FILE__), array( 'jquery' ) , false , false );
    		wp_enqueue_script( 'taqyeem-main' );
    	}

    опять таки скрипт не загружается нигде, хотя порывшись в исходниках wp с comment-reply.js — это прокатывает.

    Что скажите? =)) Большое спасибо за помощь =)

    Черт +) Надо будет в кодекс поглубже погрузиться =) Спасибо за ответ =)

    wikicms, большое спасибо Вам за помощь. Не могли бы Вы еще подсказать, как можно запретить загрузку скрипта. То есть например команда <?php wp_enqueue_script ?> подключает определенный скрипт к сайту, а есть ли его системная команда «антоним» которая отключает загрузку этого скрипта, на пример типа <?php wp_deregister_script() ?> которая удаляет инфо о зарегистрированном скрипте -) Большое спасибо за ответы -)

    Спасибо, Ваш совет помог решить проблемы с кодировкой =)

    Плагинофобию уже вылечили =) Но все равно, даже отсутствие плагинофобии не решает мой вопрос на 100%. Так как в тех плагинах правки комментария нет такого который позволял бы это делать банальным переносом формы отправки комментария к комментарию который я редактирую. Ajax comment edit делает это в убогом popup окошке =(

    Sergey Biryukov, спасибо огромное, очень Вам признателен =)

Просмотр 15 ответов — с 1 по 15 (всего 32)