tips and tricks

Подрузка видео по скролу

видео на сайте много весят, даже если сделаны для красоты, поэтому удобно их подгружать на действия пользователей, нашел интересный плагин, проверил, работает, советую
http://dinbror.dk/blazy/examples/?ref=blog

SSL сертификата порядок создания bundle.crt

в интернете много путаницы по очереди склеики сертификатов, развеем ее
если у вас нет уже объедененного файла, а есть root, intermediate и crt файл домена, их необходимо склеивать в один bundle.crt с последовательностью: домен -> intermediate -> root

Свойство раздела для переменных в header.php

При работе в header.php часто требуется использовать условия или значения, например текстовое описание страницы, а врапер использовать не хочется, решение - определить дополнительное поле для раздела (мы говорим о физическом разделе) в .section.php и получить его значение, быстро, удобно, юзабельно
.section.php

$arDirProperties = Array(
"page_top_description" => "Описание раздела"
);


header.php

<?if($page_top_description = $APPLICATION->GetProperty('page_top_description')):?>
<div class="p-top__text"><?=$page_top_description?></div>
<?endif;?>

Mapbox на русском языке


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

Переключить все названия на карте mapbox к русскому языку можно по инструкции https://www.mapbox.com/help/change-language/#multiple-layers-at-once


или через плагин 

var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/streets-v10',
    center: [-98, 38.88],
    minZoom: 2,
    zoom: 3
});
mapboxgl.setRTLTextPlugin('https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-rtl-text/v0.1.0/mapbox-gl-rtl-text.js');
map.addControl(new MapboxLanguage({
  defaultLanguage: 'ru'
}));


https://github.com/mapbox/mapbox-gl-language/

Очистка формы после submit


$(form).find('input[type="text"],input[type="tel"],textarea,input[type="number"],input[type="email"]').val('');

Минимизатор css / js для phpstorm


Assets Compressor

Refactor-> Compress и получаем нимимифицированный файл

Кнопки поделиться в социалках


взято отсюда
<script>
Share = {
        vkontakte: function(purl, ptitle, pimg, text) {
            url  = 'http://vk.com/share.php?';
            url += 'url='          + encodeURIComponent(purl);
            url += '&title='       + encodeURIComponent(ptitle);</div><div>            url += '&description=' + encodeURIComponent(text);
            url += '&image='       + encodeURI(pimg);
            url += '&noparse=true';
            Share.popup(url);
        },
        odnoklassniki: function(purl, text) {
            url  = 'http://www.odnoklassniki.ru/dk?st.cmd=addShare&st.s=1';
            url += '&st.comments=' + encodeURIComponent(text);
            url += '&st._surl='    + encodeURIComponent(purl);
            Share.popup(url);
        },
        facebook: function(purl, ptitle, pimg, text) {
            url  = 'http://www.facebook.com/sharer.php?s=100';
            url += '&p[title]='     + encodeURIComponent(ptitle);
            url += '&p[summary]='   + encodeURIComponent(text);
            url += '&p[url]='       + encodeURIComponent(purl);
            url += '&p[images][0]=' + encodeURIComponent(pimg);
            Share.popup(url);
        },
        twitter: function(purl, ptitle) {
            url  = 'http://twitter.com/share?';
            url += 'text='      + encodeURIComponent(ptitle);
            url += '&url='      + encodeURIComponent(purl);
            url += '&counturl=' + encodeURIComponent(purl);
            Share.popup(url);
        },
        mailru: function(purl, ptitle, pimg, text) {
            url  = 'http://connect.mail.ru/share?';
            url += 'url='          + encodeURIComponent(purl);
            url += '&title='       + encodeURIComponent(ptitle);</div><div>            url += '&description=' + encodeURIComponent(text);
            url += '&imageurl='    + encodeURIComponent(pimg);
            Share.popup(url)
        },
        google: function(purl) {
            url  = 'https://plus.google.com/share?';
            url += 'url='          + encodeURIComponent(purl);
            Share.popup(url)
        },

        popup: function(url) {
            window.open(url,'','toolbar=0,status=0,width=626,height=436');
        }
    };
</script>


<a onclick="Share.vkontakte('URL','TITLE','IMG_PATH','DESC')"> {шарь меня полностью}</a>
<a onclick="Share.facebook('URL','TITLE','IMG_PATH','DESC')"> {шарь меня полностью}</a>
<a onclick="Share.mailru('URL','TITLE','IMG_PATH','DESC')"> {шарь меня полностью}</a>
<a onclick="Share.odnoklassniki('URL','DESC')"> {шарь меня полностью}</a>
<a onclick="Share.twitter('URL','TITLE')"> {шарь меня полностью}</a>

Количество символов в строке PHP (utf-8, латиница)


$length = strlen(utf8_decode($s));

Сортировка по родительскому разделу в result_modifier bitrix


if($arParams['SORT_BY_COMPLEX']){

$sectionsName = $COMPLEX_OBJECT_SECTION_INF = array();
$arFilter = Array('IBLOCK_ID' => OBJECT_MAIN_IBLOCK_ID, 'ACTIVE' => 'Y', 'DEPTH_LEVEL' => 1);//'!UF_SITE_ID'=>false
$db_list = CIBlockSection::GetList(Array('SORT' => 'ASC'), $arFilter, false, array('ID','NAME','UF_SITE_ID','IBLOCK_ID','UF_COMPLEXE_LOGO','CODE'));
while ($ar_result = $db_list->Fetch()) {
$COMPLEX_OBJECT_SECTION_INF[$ar_result['ID']] = $ar_result;
}

foreach ($arResult['ITEMS'] as &$arItem){
$res = CIBlockSection::GetByID($arItem["IBLOCK_SECTION_ID"]);
$arItem['LAST_SECTION_INF'] = $res->Fetch();

$tempArResult[$COMPLEX_OBJECT_SECTION_INF[$arItem['LAST_SECTION_INF']['IBLOCK_SECTION_ID']]['SORT']][] = $arItem;
}

if($arParams['SORT_BY_COMPLEX']=='ASC'){
ksort($tempArResult);
}
else {
krsort($tempArResult);
}

$arResult['ITEMS'] = array();
foreach ($tempArResult as $sort_key=>$group_items){
LOG_INTERFACE::debugToConsole($sort_key,'$sort_key');
foreach ($group_items as $item){
$arResult['ITEMS'][] = $item;
}
}
}

gzip сжатие и кеширование изображений и других ресурсов для браузера

.htaccess
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 week"
ExpiresByType image/gif "access plus 1 week"
ExpiresByType image/png "access plus 1 week"
ExpiresByType text/css "access plus 1 week"
ExpiresByType text/svg "access plus 1 week"
ExpiresByType text/svg+xml "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
</IfModule>


<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl|svg)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

постоянный 301 редирект (htaccess)

внимание! редирект кешируется браузером и говорит поисковику о постоянном(не временном) переезде страницы
Redirect 301 /some-shit-section/ http://webkernel.ru/

PHPStorm Decrypt Password

Decrypt Password in webServers.xml
$pwd = "Your encrypted password here.";
$decrypted = '';
while (strlen($pwd) > 0) {
$decrypted .= chr(hexdec(substr($pwd, 0, 4)) ^ hexdec('dfaa'));
$pwd = substr($pwd, 4, strlen($pwd) - 1);
}
echo $decrypted;

jquery to console

jquery в консоль
var jq = document.createElement('script'); jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"; document.getElementsByTagName('head')[0].appendChild(jq);

Скрипт для выполнения по шагам, ajax, админ панель, битрикс


https://dev.1c-bitrix.ru/community/webdev/user/11948/blog/2047/

проверка ajax запроса


if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// do something
}

сортировка элементов по массиву


if($arParams['BEST_SORT_ARRAY']){
foreach($arParams['BEST_SORT_ARRAY'] as $parent_news_id){
foreach($arResult["ITEMS"] as $key=> $one_item){
if($one_item['ID']==$parent_news_id)
$new_items_arr['ITEMS'][$key] = $one_item;
}
}
$arResult["ITEMS"] = $new_items_arr['ITEMS'];
}

логический фильтр из ID для CIBlockElement::GetList

необходимо привести массив к такому виду:
$arrFilter = array(
array(
'LOGIC'=>'OR',
array('ID'=>1749305),
array('ID'=>1994586)
)
);

приводим:
$arrFilter = array(
array(
"LOGIC" => "OR",
),
); $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nTopCount"=>20), array('PROPERTY_SOME_ID'));
while($ob = $res->Fetch())
{
$arrFilter[0][] = array("ID"=>$ob['PROPERTY_SOME_ID_VALUE']);
}

запрет прокрутки окна браузера (еще раз)


$(document).bind("mousewheel", stop_scroll);
$(window).bind("scroll mousewheel", stop_scroll);

function stop_scroll(event) {
event.preventDefault();
$(document).scrollTop(top);
} // отключаем запрет $(document).unbind('mousewheel'); $(window).unbind("scroll mousewheel");

получить из строки число js


$("#phone").val().replace(/\D/g,'')

Сменить владельца для папкок и файлов

необходимость может возникнуть при особой настройке сервера, когда права на файлы созданные/измененные по shh будут отличаться от создаваемых сервером(apache), в этом случае может даже не получиться создать/изменить файл/папке с помощью битрикса, если права владения на родительскую папку будут отличаться. Скрипт ниже рекурсивно изменит владельца на папки и файлы директории public_html:
chown -R bitrix:bitrix /absolute/path/to/site-dir/


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

Загрузка ...
some text