tips and tricks

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


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/

закрыть сайт паролем .htaccess, .htpasswd

размещаем .htpasswd в корне, пароль генерируем через онлайн сервисы в md5 формат, должна получиться запись в стиле: admin:$apr1$4U6Sd3mX$GRTmqSENCrK9mMTFPV7TE1
AuthType Basic
AuthName "Thats protected Area!"
AuthUserFile /home/bitrix/www/.htpasswd
Require valid-user
<Files .htpasswd>
deny from all
</Files>

Удобное добавление lang языковых файлов к файлам компонента

можно например использовать при ajax запросе файла в шаблоне компонента, после добавление вызова просто вызываем функцию GetMessage(), как в шаблоне компонента: например создали файлик props.php в шаблоне компонента и соответственно создаем одноименный файл в /lang директории для соответствующего языка, радуемся жизни.
<? $this_file_name = pathinfo(__FILE__); require_once($BX_DOC_ROOT.'/bitrix/components/some_space/some_component/templates/.default/lang/'.LANGUAGE_ID.'/'.$this_file_name['basename']); ?>

ajax запрос


$.ajax({       
type: "POST",
url: $(this).attr("action"),
data: $(this).serialize()
,

dataType: 'json'
})
.done(function(data) {
console.log(data);
});


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

Загрузка...