Пара тапок » php http://paratapok.ru Блог о веб-разработке Sun, 18 Dec 2022 12:14:48 +0000 ru-RU hourly 1 https://wordpress.org/?v=4.3.34 Как узнать откуда пришли на сайт: Яндекс поиск, Гугл поиск, Директ, Адвордс? http://paratapok.ru/frontend/2639_kak-uznat-otkuda-prishli-na-sajt-yandeks-poisk-gugl-poisk-direkt-advords/ http://paratapok.ru/frontend/2639_kak-uznat-otkuda-prishli-na-sajt-yandeks-poisk-gugl-poisk-direkt-advords/#comments Fri, 24 Nov 2017 14:04:51 +0000 http://paratapok.ru/?p=2639 Читать далее →]]> Если вы являетесь владельцем сайта, то вы можете получать трафик из поисковых систем (yandex, google) и с контекстных площадок (direct, adwords). Иногда требуется в зависимости от источника трафика показывать определенные данные на сайте или учитывать источник в собственной системе аналитики. Чтобы узнать откуда пришли на сайт (Яндекс поиск, Гугл поиск, Директ или Адвордс), Вам поможет следующий php-скрипт:

$reffer = $_SERVER['HTTP_REFERER'];

if(strpos($reffer, "yandex")!= 0 && strpos($reffer, "доменное_имя_вашего_сайта")== 0)
{
	if(!empty($_GET['yclid']))
	{
		echo('direct');
	}
	elseif(!empty($_GET['utm_source']) && $_GET['utm_source'] == 'yandex')
	{
		echo('direct');
	}
	else
	{					
		echo('yandex');
	}	
}
elseif(strpos($reffer, "google")!= 0 && strpos($reffer, "доменное_имя_вашего_сайта")== 0)
{	
	
	if(!empty($_GET['gclid']))
	{
		echo('adwords');
	}
	elseif(!empty($_GET['utm_source']) && $_GET['utm_source'] == 'google')
	{
		echo('adwords');
	}		
	else
	{
		echo('google');
	}	

}

Попробуем объяснить, что делает скрипт. В переменной $_SERVER[‘HTTP_REFERER’] содержится урл сайта, с которого был осуществлен переход. Из поиска и директа Яндекса в качестве этого урла будет его адрес. Но для определения посетителя из Директа необходимо учитывать $_GET переменные: метки (utm) или переменную для метрики yclid.

UTM-метки задаются при создании и редактировании объявлений в личном кабинете при настройке рекламных кампаний.

Переменную для метрики yclid можно включить, указав галочку вот тут:

Но учтите, что при выборе данной галочки UTM-метки (utm_source) работать не будут. В данном скрипте сделал учёт обоих случаев, чтобы работало и с галочкой, и без нее (тут требует установка утм-меток в объявлении).

При переходе из поиска и адвордса Гугла в качестве урла в $_SERVER[‘HTTP_REFERER’] будет его адрес. Но для определения посетителя из Адвордса необходимо учитывать $_GET переменные: метки (utm) или переменную для гугланалитикса gclid. В этом случае при настройке объявлений в рекламной кампании утм-метки задаются точно также. Учёт обоих переменных в скрипте также предусмотрен.

Для того чтобы при переходе по одному из источников в течении сессии посетителя данные, определённые по источнику трафика, сохранились в сессии, можно воспользоваться следующей модификацией скрипта:

session_start();
		
$config = array(
'direct' => 'direct',
'adwords' => 'adwords',
'yandex' => 'yandex',
'google' => 'google',
'0' => 'это по умолчанию, при прямом заходе на сайт',
);

$currentParam = $config['0'];

$reffer = $_SERVER['HTTP_REFERER'];

if(strpos($reffer, "yandex")!= 0 && strpos($reffer, "доменное_имя_вашего_сайта")== 0)
{
	if(!empty($_SESSION['currentParam']))
		$_SESSION['currentParam'] = '';
	
	
	if(!empty($_GET['yclid']))
	{
		$currentParam = $config['direct'];
	}
	elseif(!empty($_GET['utm_source']) && $_GET['utm_source'] == 'yandex')
	{
		$currentParam = $config['direct'];
	}
	else
	{					
		$currentParam = $config['yandex'];
	}

	
}
elseif(strpos($reffer, "google")!= 0 && strpos($reffer, "доменное_имя_вашего_сайта")== 0)
{
	
	if(!empty($_SESSION['currentParam']))
		$_SESSION['currentParam'] = '';
	
	
	if(!empty($_GET['gclid']))
	{
		$currentParam = $config['adwords'];
	}
	elseif(!empty($_GET['utm_source']) && $_GET['utm_source'] == 'google')
	{
		$currentParam = $config['adwords'];
	}		
	else
	{
		$currentParam = $config['google'];
	}	

}

if(empty($_SESSION['currentParam']))
{
	$_SESSION['currentParam'] = $currentParam;
}
]]>
http://paratapok.ru/frontend/2639_kak-uznat-otkuda-prishli-na-sajt-yandeks-poisk-gugl-poisk-direkt-advords/feed/ 1
Как написать php календарь на месяц и на год? http://paratapok.ru/backend/2529_kak-napisat-php-kalendar-na-mesyac-i-na-god/ http://paratapok.ru/backend/2529_kak-napisat-php-kalendar-na-mesyac-i-na-god/#comments Wed, 30 Dec 2015 16:14:22 +0000 http://paratapok.ru/?p=2529 Читать далее →]]> В преддверии нового года возникла весьма тривиальная задача — сделать сайт-календарь, где для каждого месяца необходимо было вывести свой календарь на месяц. Первым этапом решения задачи — стал поиск готовых решений. После перебора десятка приведенных в интернете решений выбор был сделан. Какие-то версии и вовсе оказались нерабочими, какие-то слишком громоздкими — их пришлось бы изрядно «попилить», чтобы получить требуемый результат. Итак, рассмотрим как написать простой календарь на php.

Основа скрипта была найдена на просторах интернета, ошибки были исправлены, кое-что было доделано, в частности добавлена функциональность выделения выходных дней отдельным css-классом.

PHP календарь на месяц

Реализация календаря на месяц на чистом PHP без использования mySQL, jQuery и т.д. приведена ниже:

<?

function draw_calendar($month, $year, $action = 'none') {
	$calendar = '<table cellpadding="0" cellspacing="0" class="b-calendar__tb">';
	
	// вывод дней недели
	$headings = array('Пн','Вт','Ср','Чт','Пт','Сб','Вс');
	$calendar.= '<tr class="b-calendar__row">';
	for($head_day = 0; $head_day <= 6; $head_day++) {
		$calendar.= '<th class="b-calendar__head';
		// выделяем выходные дни
		if ($head_day != 0) {
			if (($head_day % 5 == 0) || ($head_day % 6 == 0)) {
				$calendar .= ' b-calendar__weekend';
			}
		}
		$calendar .= '">';
		$calendar.= '<div class="b-calendar__number">'.$headings[$head_day].'</div>';
		$calendar.= '</th>';
	}
	$calendar.= '</tr>';

	// выставляем начало недели на понедельник
	$running_day = date('w',mktime(0,0,0,$month,1,$year));
	$running_day = $running_day - 1;
	if ($running_day == -1) {
		$running_day = 6;
	}
	
	$days_in_month = date('t',mktime(0,0,0,$month,1,$year));
	$day_counter = 0;
	$days_in_this_week = 1;
	$dates_array = array();
	
	// первая строка календаря
	$calendar.= '<tr class="b-calendar__row">';
	
	// вывод пустых ячеек
	for ($x = 0; $x < $running_day; $x++) {
		$calendar.= '<td class="b-calendar__np"></td>';
		$days_in_this_week++;
	}
	
	// дошли до чисел, будем их писать в первую строку
	for($list_day = 1; $list_day <= $days_in_month; $list_day++) {
		$calendar.= '<td class="b-calendar__day';

		// выделяем выходные дни
		if ($running_day != 0) {
			if (($running_day % 5 == 0) || ($running_day % 6 == 0)) {
				$calendar .= ' b-calendar__weekend';
			}
		}
		$calendar .= '">';

		// пишем номер в ячейку
		$calendar.= '<div class="b-calendar__number">'.$list_day.'</div>';
		$calendar.= '</td>';

		// дошли до последнего дня недели
		if ($running_day == 6) {
			// закрываем строку
			$calendar.= '</tr>';
			// если день не последний в месяце, начинаем следующую строку
			if (($day_counter + 1) != $days_in_month) {
				$calendar.= '<tr class="b-calendar__row">';
			}
			// сбрасываем счетчики 
			$running_day = -1;
			$days_in_this_week = 0;
		}

		$days_in_this_week++; 
		$running_day++; 
		$day_counter++;
	}

	// выводим пустые ячейки в конце последней недели
	if ($days_in_this_week < 8) {
		for($x = 1; $x <= (8 - $days_in_this_week); $x++) {
			$calendar.= '<td class="b-calendar__np"> </td>';
		}
	}
	$calendar.= '</tr>';
	$calendar.= '</table>';

	return $calendar;
}

?>

На вход функция draw_calendar получает порядковый номер месяца и год. Результатом исполнения функции является html-код календаря на заданный месяц. Использовать вышеприведенную функцию несложно, и сможет даже новичок в веб-разработке. Пример ниже выведет календарь на январь 2016 год.

<div class="b-calendar b-calendar--along">
	<div class="b-calendar__title"><span class="b-calendar__month">Январь</span> <span class="b-calendar__year">'16</span></div>
	<?
		echo draw_calendar(1,2016);
	?>
</div>

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

Php-календарь на год

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

PHP календарь на год

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

Код в таком случае будет следующим:

<?
	$months = Array(
		0 => 'Январь',
		1 => 'Февраль',
		2 => 'Март',
		3 => 'Апрель',
		4 => 'Май',
		5 => 'Июнь',
		6 => 'Июль',
		7 => 'Август',
		8 => 'Сентябрь',
		9 => 'Октябрь',
		10 => 'Ноябрь',
		11 => 'Декабрь'
	);

	for ($month = 1; $month <= 12; $month++) { ?>
		<div class="b-calendar b-calendar--many">
			<div class="b-calendar__title"><span class="b-calendar__month"><?= $months[$month-1] ?></span> <span class="b-calendar__year">'16</span></div>
			<?
				echo draw_calendar($month,2016);
			?>
		</div>
	<? }
?>

Примеры приведенные в данном посте вы можете скачать с гитхаба.

]]>
http://paratapok.ru/backend/2529_kak-napisat-php-kalendar-na-mesyac-i-na-god/feed/ 5