tips and tricks - Идиомы web программирования

Минимизатор 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);
            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);
            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 / 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/

РЕГУЛЯРКИ


очистка города из адреса, e.g. Санкт-Петербург, Дворцовая площадь
 $clear_city_arr = array(
                'msk'=>"/( +|)Москва[, ]+/i",
                'spb'=>"/( +|)Санкт-Петербург[, ]+/i",
            );

проверка 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 nobody:nobody public_html

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

размещаем .htpasswd в корне, пароль генерируем через онлайн сервисы, должна получиться запись в стиле: 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);
});

доступ к битрикс api


require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");


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