9 августа 2022 Нет комментариев

Когда каждый элемент .block полностью показан (прокручен до конца) добавляем блоку .bullet класс .active

$(document).ready(function(){
	$(window).scroll(function(){
		var scroll=parseInt($(window).scrollTop())+parseInt($(window).height());
		$('.block').each(function(){
			var offset=parseInt($(this).offset().top)+parseInt($(this).height());
			if(scroll>offset){
				$(this).find('.bullet').addClass('active');
			}
		});
	});
});
Categories: Javascript Tags: ,
8 августа 2022 Нет комментариев
$result=array();
ob_start('ob_gzhandler');
echo json_encode($result);
Categories: PHP Tags:
4 августа 2022 Нет комментариев
echo preg_replace('/<(\s*)img[^<>]*>/i','',$text);
Categories: PHP Tags:
3 августа 2022 1 комментарий

В примере для PageSpeed Insights показываем вместо контента скриншот страницы
Вариант 1 через PageSpeed Insights API:
Ключ API получить здесь: https://developers.google.com/speed/docs/insights/v5/get-started

if(strpos($_SERVER['HTTP_USER_AGENT'],'Chrome-Lighthouse')!==false){
	Define("IS_LIGHTHOUSE",1);
}
if(defined('IS_LIGHTHOUSE')){
	$api_key="yourAPIKey";
	$requested_link=explode('?',$_SERVER['REQUEST_URI']);
	$screen_url=$_SERVER['HTTP_X_FORWARDED_PROTO']."://".$_SERVER['HTTP_HOST'].$requested_link[0];
	$strategy=(defined('IS_MOBILE'))?'MOBILE':'DESKTOP';
	$curl_url="https://pagespeedonline.googleapis.com/pagespeedonline/v5/runPagespeed?url=".urlencode($screen_url)."&category=CATEGORY_UNSPECIFIED&strategy=".$strategy."&key=".$api_key;
	$curl=curl_init($curl_url);
	curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
	$response=curl_exec($curl);
	curl_close($curl);
	$googledata=json_decode($response,true);
	$screen_img=$googledata["lighthouseResult"]["audits"]["full-page-screenshot"]["details"]["screenshot"]["data"];
	exit('<html><head><meta name="viewport" content="width=device-width,initial-scale=1"/></head><body><img src="'.$screen_img.'" alt="" width="100%" height="100%"/></body></html>');
}

Вариант 2 — более быстрый, не нужен ключ

if(strpos($_SERVER['HTTP_USER_AGENT'],'Chrome-Lighthouse')!==false){
	Define("IS_LIGHTHOUSE",1);
}
if(defined('IS_LIGHTHOUSE')){
	if(defined('IS_MOBILE')){
		$w=375;
		$h=812;
	}
	else{
		$w=1920;
		$h=1080;
	}
	$requested_link=explode('?',$_SERVER['REQUEST_URI']);
	$screen_url=$_SERVER['HTTP_X_FORWARDED_PROTO']."://".$_SERVER['HTTP_HOST'].$requested_link[0];
	$screen_img="https://s0.wordpress.com/mshots/v1/".urlencode($screen_url)."?w=".$w."&h=".$h;
	exit('<html><head><meta name="viewport" content="width=device-width,initial-scale=1"/></head><body><img src="'.$screen_img.'" alt="" width="100%" height="100%"/></body></html>');
}

Спрятать адрес wordpress.com:

if(strpos($_SERVER['HTTP_USER_AGENT'],'Chrome-Lighthouse')!==false){
	Define("IS_LIGHTHOUSE",1);
}
if(defined('IS_LIGHTHOUSE')){
	if(defined('IS_MOBILE')){
		$w=375;
		$h=812;
	}
	else{
		$w=1920;
		$h=1080;
	}
	$requested_link=explode('?',$_SERVER['REQUEST_URI']);
	$screen_url=$_SERVER['HTTP_X_FORWARDED_PROTO']."://".$_SERVER['HTTP_HOST'].$requested_link[0];
	$screen_img_url="https://s0.wordpress.com/mshots/v1/".urlencode($screen_url)."?w=".$w."&h=".$h;
	$curl=curl_init($screen_img_url);
	curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
	curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true);
	curl_setopt($curl,CURLOPT_USERAGENT,'Mozilla/5.0 (Macintosh; Intel Mac OS X 12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36');
	$img_data=curl_exec($curl);
	$screen_img='data:image/jpg;base64,'.base64_encode($img_data);
	exit('<html><head><meta name="viewport" content="width=device-width,initial-scale=1"/></head><body><img src="'.$screen_img.'" alt="" width="100%" height="100%"/></body></html>');
}
Categories: PHP Tags:

В примере если опций 2 то выбирать последнюю

var select_format=$('select[name=format]');
var options_count=select_format.find('option').length;
if(options_count==2){
	select_format.prop('selectedIndex',options_count-1).change();
}
Categories: Javascript Tags:

$price — полная стоимость
$first — первоначальный взнос в %
$rate — ставка в %
$years — кол-во лет

function calc_annuity($price,$first,$rate,$years){
	$credit_price=$price-($price*$first/100);
	$real_rate=$rate/100;
	$pay_year=$credit_price*($real_rate+($real_rate/(pow(1+$real_rate,$years)-1)));
	$pay_month=$pay_year/12;
	return $pay_month;
}

Например для расчета ежемесячного платежа для суммы 2000000, с первоначальным взносом 15% под 10.7% годовых на 20 лет

echo calc_annuity(2000000,15,10.7,20);

Еще вариант:

<?php
 
// Задаем начальные данные
$loanAmount = 1000000; // сумма кредита
$interestRate = 12 / 100; // процентная ставка (годовая)
$loanTerm = 12; // срок кредита (месяцы)
 
// Расчет ежемесячного платежа
$monthlyInterestRate = $interestRate / 12; // процентная ставка (месячная)
$annuityFactor = $monthlyInterestRate * pow(1 + $monthlyInterestRate, $loanTerm) / (pow(1 + $monthlyInterestRate, $loanTerm) - 1);
$monthlyPayment = $annuityFactor * $loanAmount;
 
echo "Ежемесячный платеж: " . round($monthlyPayment, 2) . " рублей";
 
?>
Categories: PHP Tags:

php:

class Calendar{
	public static function getMonth($month,$year,$events=array()){
		$months=array(
			1=>'Январь',
			2=>'Февраль',
			3=>'Март',
			4=>'Апрель',
			5=>'Май',
			6=>'Июнь',
			7=>'Июль',
			8=>'Август',
			9=>'Сентябрь',
			10=>'Октябрь',
			11=>'Ноябрь',
			12=>'Декабрь'
		);
		$month=intval($month);
		$out='
		<div class="calendar-item">
			<div class="calendar-head">'.$months[$month].' '.$year.'</div>
			<table>
				<tr>
					<th>Пн</th>
					<th>Вт</th>
					<th>Ср</th>
					<th>Чт</th>
					<th>Пт</th>
					<th>Сб</th>
					<th>Вс</th>
				</tr>';
		$day_week=date('N',mktime(0,0,0,$month,1,$year));
		$day_week--;
		$out.='<tr>';
		for($x=0;$x<$day_week;$x++){
			$out.='<td></td>';
		}
		$days_counter=0;
		$days_month=date('t',mktime(0,0,0,$month,1,$year));
		for($day=1;$day<=$days_month;$day++){
			$class='';
			$month_url=($month<10)?'0'.$month:$month;
			$day_url=($day<10)?'0'.$day:$day;
			if((!isset($_GET['date'])&&date('j.n.Y')==$day.'.'.$month.'.'.$year)||($_GET['date']==$year.'-'.$month_url.'-'.$day_url)){
				$class.=' today';
			}
			if(strtotime('-1 day')>strtotime($day.'.'.$month.'.'.$year)){
				$class.=' last';
			}
			$event_show=false;
			$event_text=array();
			if(!empty($events)){
				foreach($events as $date=>$text){
					$date=explode('.',$date);
					if(count($date)==3){
						$y=explode(' ',$date[2]);
						if(count($y)==2){
							$date[2]=$y[0];
						}
						if($day==intval($date[0])&&$month==intval($date[1])&&$year==$date[2]){
							$event_show=true;
							$event_text[]=$text;
						}
					}
					elseif(count($date)==2){
						if($day==intval($date[0])&&$month==intval($date[1])){
							$event_show=true;
							$event_text[]=$text;
						}
					}
					elseif($day==intval($date[0])){
						$event_show=true;
						$event_text[]=$text;
					}
				}
			}
			if($event_show){
				$class.=' event';
			}
			$out.='<td class="calendar-day'.$class.'"><a href="'.ADMIN_URL.'?work=schedule&date='.$year.'-'.$month_url.'-'.$day_url.'">'.$day.'</a>';
			if($event_show){
				if(!empty($event_text)){
					$out.='<div class="calendar-popup"><div>'.implode('</div><div>',$event_text).'</div></div>';
				}
			}
			$out.='</td>';
			if($day_week==6){
				$out.='</tr>';
				if(($days_counter+1)!=$days_month){
					$out.='<tr>';
				}
				$day_week=-1;
			}
			$day_week++;
			$days_counter++;
		}
		$out.='</tr></table></div>';
		return $out;
	}
	public static function getInterval($start,$end,$events=array()){
		$curent=explode('.',$start);
		$curent[0]=intval($curent[0]);
		$end=explode('.',$end);
		$end[0]=intval($end[0]);
		$begin=true;
		$out='<div class="calendar-wrp">';
		do{
			$out.=self::getMonth($curent[0],$curent[1],$events);
			if($curent[0]==$end[0]&&$curent[1]==$end[1]){
				$begin=false;
			}
			$curent[0]++;
			if($curent[0]==13){
				$curent[0]=1;
				$curent[1]++;
			}
		}
		while($begin==true);
		$out.='</div>';
		return $out;
	}
}

css:

.calendar-item{
	width:200px;
	display:inline-block;
	vertical-align:top;
	margin:0 15px 20px;
}
.calendar-head{
	text-align:center;
	padding:5px;
	font-weight:700;
	font-size:14px;
}
.calendar-item table{
	border-collapse:collapse;
	width:100%;
}
.calendar-item th,.calendar-item td{
	font-size:12px;
	text-align:center;
}
.calendar-item th{
	padding:5px;
	color:#888888;
	font-weight:400;
}
.calendar-item td{
	border:1px solid #dddddd;
}
.calendar-item td a{
	text-decoration:none;
	padding:5px;
	display:block;
}
.calendar-item td a:hover{
	background:#dddddd;
}
.calendar-item tr th:nth-child(6) a,.calendar-item tr th:nth-child(7) a,
.calendar-item tr td:nth-child(6) a,.calendar-item tr td:nth-child(7) a{
	color:#e65a5a;
}
.calendar-day.last a{
	color:#999999 !important;
}
.calendar-day.event{
	position:relative;
	cursor:pointer;
}
.calendar-day.event a{
	background:#e6f3fe;
}
.calendar-day.today a{
	background:#fe9c4b;
	color:#ffffff;
}
.calendar-day.event:hover .calendar-popup{
	display:block;
}
.calendar-popup{
	display:none;
	position:absolute;
	top:40px;
	left:0;
	min-width:200px;
	padding:15px;
	background:#ffffff;
	text-align:left;
	font-size:12px;
	z-index:100;
	box-shadow:0 0 10px rgba(0,0,0,0.5);
	color:#000000;
}
.calendar-popup div{
	margin-bottom:5px;
}
.calendar-popup:before{
	content:"";
	border:solid transparent;
	position:absolute;
	left:8px;
	bottom:100%;
	border-bottom-color:#ffffff;
	border-width:9px;
	margin-left:0;
}

Использование:
Текущий месяц

echo Calendar::getMonth(date('n'), date('Y'));

3 месяца

echo Calendar::getInterval(date('n.Y'), date('n.Y', strtotime('+2 month')));

Текущий год

echo Calendar::getInterval(date('01.Y'), date('12.Y'));

12 месяцев, начиная с текущего, с метками
формат даты:
d – день месяца, при таком формате, заданный день будет выделятся каждый месяц.
d.m – день и месяц, такая дата будет выделятся раз в год.
d.m.Y или d.m.Y H:i – точная дата.

$events=array(
	'15'=>'Заплатить ипотеку',
	'23.02'=>'День защитника Отечества',
	'08.03'=>'Международный женский день',
	'31.12'=>'Новый год'
);
echo Calendar::getInterval(date('n.Y'), date('n.Y', strtotime('+11 month')), $events);

На основе https://snipp.ru/php/php-calendar

Categories: PHP Tags: