Редирект директории на новую с вложенными директориями
1 |
RedirectMatch 301 /brand/(.*)$ /brands/$1 |
Где brand нужная вам категория
1 |
RedirectMatch 301 /brand/(.*)$ /brands/$1 |
Где brand нужная вам категория
Для автоопределения кодировки в редакторе Atom Используем команду
1 |
apm install auto-encoding |
В firefox с выходом версии 59, перестало срабатывать javascript/jQuery событие click в плагине bxslider? Отрываем jquery.bxslider.js находим строку ~#1111
1 2 3 4 |
if (slider.viewport.get(0).setPointerCapture) { slider.pointerId = orig.pointerId; slider.viewport.get(0).setPointerCapture(slider.pointerId); } |
Меняем на
1 2 3 4 5 6 |
if (slider.viewport.get(0).setPointerCapture) { slider.pointerId = orig.pointerId; if(slider.pointerId === 1){ slider.viewport.get(0).setPointerCapture(slider.pointerId); } } |
Или Скачать исправленную версию. p.s.: если сделать событие mousedown то будет работать) но лучше lib’у править Проблема на GitHub.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
/** * Работа с Google Ecommerce */ var GoogleAnalytics = { /** * Детальная страница * @param integer id идентификатор товара * @param string name Название товара * @param string category Категория товара * @return null Отправка данных в GA */ viewDetailItem: function(id, name, category){ ga('ec:addProduct', { 'id': id, 'name': name, 'category': category }); ga('ec:setAction', 'detail'); ga('send', 'pageview'); // Отправляем данные }, /** * Добавление/удаление товара в корзине * @param integer id id товара * @param string name наименование товара * @param string category категория товара * @param integer price цена товара * @param integer type тип событие 0-добавление, 1 удаление */ EventItemBasket: function(id, name, category, price, type){ type_event = type == 0 ? 'add' : 'remove'; ga('ec:addProduct', { 'id': id, 'name': name, 'category': category, 'price': price, 'quantity': 1 }); ga('ec:setAction', type_event); event = type == 0 ? "Добавил в корзину" : "Удалил товар из корзины"; ga('send', 'event', 'Корзина', event, 'Клик в карточке товара'); // Send data using an event. }, /** * Отправка содержимого корзины * @param array arr json Массив * @param integer total_price финальная стоимость заказа * @param string id basket session * @return NULL отправляем все это в гугл */ eventBasketSend: function(arr, total_price, id){ items = JSON.parse(arr); items.forEach(function(key, value){ element_id = key.elem_id; quantity = key.quantity; price = key.price; title = key.site_title; ga('ec:addProduct', { 'id': element_id, 'name': title, 'price': price, 'quantity': quantity }); }); ga('ec:setAction', 'purchase', { 'id': id, 'affiliation': 'site.ru', 'revenue': total_price }); ga('send', 'pageview'); } }; |
Документация Код гугл аналитики вставить перед </head>
1 2 3 4 5 6 7 8 9 10 11 12 |
<!-- Google Analytics --> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-XXXXXXX-1', 'site.ru'); ga('send', 'pageview'); ga('require', 'ec'); </script> <!-- End Google Analytics --> |
sendpulse api пример получания token ключа и получение email’ов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
<?php $token = $_COOKIE['sendpulse_token']; /** * @param NULL * @return mixed */ function getToken () { $tokenArr = array( 'grant_type' => 'client_credentials', 'client_id' => 'id', 'client_secret' => 'id_secret' ); $tokenGo = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => http_build_query($tokenArr) ) ); $tokenMass = file_get_contents("https://api.sendpulse.com/oauth/access_token", false, stream_context_create($tokenGo)); $json = json_decode($tokenMass); return $json->access_token; } function getEmails ($token) { $tokenArr = array( 'grant_type' => 'client_credentials', 'access_token' => $token, 'token_type' => 'Bearer' ); $tokenGo = array( 'http' => array( 'method' => 'GET', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => http_build_query($tokenArr) ) ); $tokenMass = file_get_contents("https://api.sendpulse.com/addressbooks", false, stream_context_create($tokenGo)); $json = json_decode($tokenMass); return $json; } if (!$_COOKIE['sendpulse_token']) { setcookie('sendpulse_token', getToken(), time()+3600); echo "token install!!!"; } else { echo "token found!!!<br/>"; echo $token; } echo "<hr/>"; var_dump(getEmails($token)); |
1 |
nmap -sV -p 1-65535 site.ru |
Сканирование портов с помощью Nmap/Zenmap Сканирование на iphone девайс
Sublime Text -> Preferences -> Settings(User) Вставить:
1 2 3 4 5 6 7 8 9 10 |
{ "default_encoding": "UTF-8", "fallback_encoding": "Cyrillic (Windows 1251)", "font_size": 15, "ignored_packages": [ "Vintage" ], "open_files_in_new_window": false } |
default_encoding — кодировка по умолчанию; font_size — шрифт open_files_in_new_window — открывать файлы в текущем окне (не в новом), открывает новую вкладку, а не окно. Документация