• Функция strlen() неправильно считает русские символы. Как исправить?

    @STZ
    mb_strlen
    mb_strtolower
    и т.д. привет юникод
    Ответ написан
    Комментировать
  • Как центрировать модальное окно BX.PopupWindow?

    winer
    @winer
    занимаюсь разработкой сайтов на 1c-bitrix
    Центрировать popup можно с помощью его методов adjustPosition и resizeOverlay;
    Например так:
    var popup = BX.PopupWindowManager.create("sender_subscribe_component", null, {
        autoHide: true,
        offsetLeft: 0,
        offsetTop: 0,
        overlay: true,
        closeByEsc: true,
        events: {
            onAfterPopupShow: function () {
                popup.adjustPosition();
                popup.resizeOverlay();
            }
        }
    });
    
    popup.show();
    Ответ написан
    1 комментарий
  • Как исправить проблему сессий?

    ioxio
    @ioxio
    Web-developer
    Если в "Настройки модулей - Главный модуль" и "Нстройки - Сайты - Список сайтов (в активный сайт )"
    Данные разные указаны (домены) - начинается проблема с сессиями
    Скинем на дефолт -

    Код вставим в страничку и откроем ее.
    <?
            // Вместо "main.ru - свой домен
     COption::SetOptionString("main","server_name","main.ru");
    	COption::SetOptionString("main","site_name","main.ru");
    
            // Убераем из Нстройки - Сайты - Список сайтов (в активный сайт )
    	$obSite = new CSite();
    	$t = $obSite->Update("s1", array(
    		'ACTIVE' => "Y",
    		"SERVER_NAME"  => "",
    		"DOMAINS" => ""
    	));
    ?>


    Поможет.
    Ответ написан
    5 комментариев
  • Изменить значение пользовательского поля в Битрикс24 при создании новой задачи?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    1) В поле типа "Привязка к разделам инф.блоков" нельзя указать ID инфоблока.
    ID инфоблока выбирается при создании поля к сущности задачи, а при создании самой задачи указываются только ID разделов.

    2) Событие OnBeforeTaskAdd принимает выходным параметром $arFields, ассоциативный массив полей создаваемой задачи.
    Указывая обработчик события вы явно передаете что принимаете его по ссылке?

    между
    function handleBeforeTaskAdd( $arFields )

    и
    function handleBeforeTaskAdd( &$arFields )

    очень большая разница

    3) Обработчики построены таким образом, что вызываются последовательно.
    Существует вероятность что другой обработчик, следующий за Вашим, перетирает Ваше значение
    Ответ написан
    Комментировать
  • Как в коробочной версии bitrix24 получить комментарий к лиду?

    Для того, чтобы найти комментарий:
    \Bitrix\Main\Loader::includeModule('crm');
    
    $rs = Bitrix\Crm\Timeline\Entity\TimelineTable::getList(array(
      'order' => array("ID" => "DESC"), 
      'filter' => array('=TYPE_ID' => 7),
    'select'=>array("ID", "BINDINGS")
    ));
    while($ar = $rs->Fetch()) 
    {
       echo '<pre>';
       print_r($ar);
       echo '</pre>';
    }

    Array
    (
       [ID] => 1537
       [CRM_TIMELINE_ENTITY_TIMELINE_BINDINGS_OWNER_ID] => 1537
       [CRM_TIMELINE_ENTITY_TIMELINE_BINDINGS_ENTITY_TYPE_ID] => 1
       [CRM_TIMELINE_ENTITY_TIMELINE_BINDINGS_ENTITY_ID] => 134
       [CRM_TIMELINE_ENTITY_TIMELINE_BINDINGS_IS_FIXED] => 
    )

    ENTITY_TYPE_ID берётся из CCrmOwnerType, например, \CCrmOwnerType::Lead
    ENTITY_ID - собственно ID лида/сделки/где-там-ещё можно комментарии оставлять
    OWNER_ID - это ID который нам нужен для следующего запроса

    $rs = Bitrix\Crm\Timeline\Entity\TimelineTable::getList(array(
       'order' => array("ID" => "DESC"), 
       'filter' => array('=TYPE_ID' => 7)
    ));
    while($ar = $rs->Fetch()) 
    {
       echo '<pre>';
       print_r($ar);
       echo '</pre>';
    }

    Array
    (
        [ID] => 263472
        [TYPE_ID] => 7
        [TYPE_CATEGORY_ID] => 0
        [CREATED] => Bitrix\Main\Type\DateTime Object
            (
                [value:protected] => DateTime Object
                    (
                        [date] => 2019-03-18 15:26:16.000000
                        [timezone_type] => 3
                        [timezone] => Europe/Moscow
                    )
    
            )
    
        [AUTHOR_ID] => 14
        [ASSOCIATED_ENTITY_ID] => 0
        [ASSOCIATED_ENTITY_TYPE_ID] => 0
        [COMMENT] => повторное обращение
        [SETTINGS] => Array
            (
                [HAS_FILES] => N
            )
    
    )
    Ответ написан
    2 комментария
  • Как передать UTM-метки в CRM Битрикс 24 с помощью PHP?

    Итак, сначала нужно записать утм в массив $_cookie для того, что при переходе на другие страницы не потерялись значения, вот этот код отвечает за это:

    if(isset($_GET["utm_source"])) setcookie("utm_source",$_GET["utm_source"],time()+3600*24*30,"/"); 
    if(isset($_GET["utm_medium"])) setcookie("utm_medium",$_GET["utm_medium"],time()+3600*24*30,"/"); 
    if(isset($_GET["utm_campaign"])) setcookie("utm_campaign",$_GET["utm_campaign"],time()+3600*24*30,"/"); 
    if(isset($_GET["utm_content"])) setcookie("utm_content",$_GET["utm_content"],time()+3600*24*30,"/"); 
    if(isset($_GET["utm_term"])) setcookie("utm_term",$_GET["utm_term"],time()+3600*24*30,"/");


    Добавляйте его на каждую страницу↑.

    Затем создаем в форме невидимые поля, cо значениями:
    <input name="utm-source" type="hidden" value="<?=$_COOKIE['utm_source']?>">
    <input name="utm-medium" type="hidden" value="<?=$_COOKIE['utm_medium']?>">
    <input name="utm-compaign" type="hidden" value="<?=$_COOKIE['utm_compaign']?>">
    <input name="utm-content" type="hidden" value="<?=$_COOKIE['utm_content']?>">
    <input name="utm-term" type="hidden" value="<?=$_COOKIE['utm_term']?>">


    А в обработчике уже принимаем данные, как и все остальные поля:
    'UTM_SOURCE' => $_POST['utm-source'],
    	            'UTM_MEDIUM' => $_POST['utm-medium'],
    	            'UTM_CAMPAIGN' => $_POST['utm-campaign'],
    	            'UTM_CONTENT' => $_POST['utm-content'],
    	            'UTM_TERM' => $_POST['utm-term'],


    Результат:
    5ea8c07a0c226249777337.jpeg
    Ответ написан
    8 комментариев
  • Как отключить 'Touch' yandex maps?

    @lookfortheroot
    Frontendman
    Лучше поздно, чем никогда. Для будущих страдальцев и nikolaybolonin — блоку с картой надо сделать так:
    map.behaviors.disable('drag');
    и
    .map * {
    	touch-action: auto
    }

    и всё магически заработает. Другими словами, будет прокрутка страницы одним пальцем, как положено, плюс перемещение и зум двумя пальцами.

    Для информации, отключение
    map.behaviors.disable('drag');

    в Android + Chrome/Firefox блокирует прокрутку страницы вообще, но в iOS/Safari всё нормально (на момент API 2.1)

    Мне неведомо, как в Яндексе тестируют свой софт, так что это останется на их совести.
    Ответ написан
    2 комментария
  • Можно ли получить информацию о текущем пользователе при помощи BX?

    udjin123
    @udjin123
    PHP, Golang, React
    BX.message('USER_ID');

    Возвращает в виде строки ID пользователя, если не авторизован то пустая строка
    Ни что вам не мешает, запихнуть из PHP данные в JS с помощью встроенного метода
    let something = <?=CUtil::PhpToJSObject($someArray)?>;
    Ответ написан
    Комментировать
  • Как получить все значения цен в битрикс?

    winer
    @winer
    занимаюсь разработкой сайтов на 1c-bitrix
    Разрешите просмотр обоих типов цен всем пользователям.
    Настройка "Группы пользователей, имеющие права на просмотр этого типа цен"
    5cee136384990886577047.png

    Если это не поможет, то цену можно получить и через API
    <?php
    
    \Bitrix\Main\Loader::includeModule("catalog");
    
    $allProductPrices = \Bitrix\Catalog\PriceTable::getList([
        "filter" => [
            "PRODUCT_ID" => $productId,
        ]
    ])->fetchAll();
    Ответ написан
    3 комментария
  • У сайта avito.ru есть своё API для разработчиков?

    kumaxim
    @kumaxim
    Web-программист
    Именно API у них нет, однако, загрузка объявлений доступна через XML. Описание формата.

    Логика работы такая:
    1. На своей стороне ты формируешь XML со всей информацией об объявлении
    2. Этот XML должен быть доступен по http:/domain.com/avito.xml
    3. Эту ссылку ты отдаешь Avito для работы
    4. С какой-то переодичность Avito проверяет твой XML и добавляет/изменяет/удаляет объявления

    Отчет о загрузке/обновлении/удалении обявлений доступен в личном кабинете и, вроде бы, еще на мыло отсылается.

    Также могу рекомендовать сервис afy.ru, однако, он работает только с недвижкой. Почему я его упомянул? Через него можно настроить автоматическую выгрузку объявлений сразу на кучу досок: Авито, Яндекс.Недвижимость, Майл,Недвижимость, ИРР и т.д. Смотри тут полный список.
    Ответ написан
    Комментировать
  • Как отследить нажатие кнопки "Назад" браузера?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    addEventListener("popstate",function(e){
        alert('yeees!');
    },false);
    Ответ написан
    2 комментария
  • Как сделать поиск по тексту на javascript?

    coderisimo
    @coderisimo Куратор тега JavaScript
    Вот основной принцип :

    https://codepen.io/coderisimo/pen/RyvPBr

    фильтруется прямо в момент ввода текста.
    Ответ написан
  • Перестал работать photos.getMarketUploadServer. У кого-то работает?

    @koder_ml9
    У кого "missing or invalid: invalid photo crop":
    При вызове photos.saveMarketPhoto передавать ему параметры: crop_data и crop_hash
    Ответ написан
    Комментировать
  • Как получить свойства торговых предложений товара?

    LisaKatrin
    @LisaKatrin
    Web-программист
    В последнем массиве propertyFilter надо прописать массив с ключем "CODE", то есть получиться:
    $arSKU = CCatalogSKU::getOffersList($arResult[ID], 0, array('ACTIVE' => 'Y'), array('NAME'), array("CODE"=>array('HEIGHT', 'WIDTH')));
    Ответ написан
    4 комментария
  • Редирект при множественном "///"?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{THE_REQUEST} //
    RewriteRule .* /$0 [R=301,L]

    - единственный нормально работающий способ.
    А вот тебе в добавок дополнительные, тут доп исключения.

    ############################################################################
    #### Cтандартный .htaccess для проектов студии Клондайк, версия 2.4     ####
    ############################################################################
    RewriteEngine On
       #  Директива включает редиректы.
    RewriteBase / 
       # Без директивы (.*) = /$1 будет /var/wwww/site/web/$1  с директивой  = /$1
    Options +FollowSymLinks
       # Разрешает переход по символическим ссылкам.
    
    ############################################################################
    #### Перенаправляем протокол https на http                              ####
    ############################################################################
    RewriteCond %{HTTPS} on
       # Проверяем наличие https в URL.
    RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
       # Перенаправляем протокол на http.
    
    ############################################################################
    #### Выбор основного зеркала (или с www или без www)                    ####
    ############################################################################
       # 1. Редирект с www на без www. (раскоментировать директивы пункта 1)
    #RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
       # Проверяем, содержит ли домен www (в начале URL).
    #RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
       # Перенаправляем URL на домен без www.
    ####
       # 2. Редирект без www на www. (раскоментировать директивы пункта 2)
    #RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
       # Проверяем, не содержит ли домен www (в начале URL).
    #RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
       # Перенаправляем URL на домен c www.
    
    ############################################################################
    #### Убираем повторяющиеся слеши (/) в URL                              ####
    ############################################################################
    RewriteCond %{THE_REQUEST} //
       # Проверяем, повторяется ли слеш (//) более двух раз.
    RewriteRule .* /$0 [R=301,L]
       # Исключаем все лишние слеши.
    
    ############################################################################
    #### Убираем слеши в конце URL для статических файлов (содержит точку)  ####
    ############################################################################
    RewriteCond %{REQUEST_URI} \..+$  
       # Если файл содержит точку.
    RewriteCond %{REQUEST_FILENAME} !-d   
       # И это не директория.
    RewriteCond %{REQUEST_FILENAME} -f
       # Является файлом.
    RewriteCond %{REQUEST_URI} ^(.+)/$      
       # И в конце URL есть слеш.
    RewriteRule ^(.+)/$ /$1 [R=301,L]     
       # Исключить слеш.
    
    ############################################################################
    #### Добавляем слеш(/), если его нет, и это не файл.                    ####
    ############################################################################
    RewriteCond %{REQUEST_URI} !(.*)/$
       # Если слеша в конце нет.
    RewriteCond %{REQUEST_FILENAME} !-f
       # Не является файлом.
    RewriteCond %{REQUEST_URI} !\..+$
       # В URL нет точки (файл).
    RewriteRule ^(.*)$ $1/ [L,R=301]
       # Добавляем слеш в конце.
    
    ############################################################################
    #### Убираем index.php, если он есть в конце URL                        ####
    ############################################################################
    RewriteCond %{REQUEST_METHOD} =GET
       # Выявляем GET запрос в URL (не POST).
    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
       # URL cодержит index.php в конце.
    RewriteRule ^(.*)$ %1/ [R=301,L]
       # Удалить index.php из URL.
    
    ############################################################################
    #### Компрессия статического контента для гугл  спид тест               ####
    ############################################################################
    <IfModule mod_deflate.c>
      # Compress HTML, CSS, JavaScript, Text, XML and fonts
      AddOutputFilterByType DEFLATE application/rss+xml
      AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
      AddOutputFilterByType DEFLATE application/x-font
      AddOutputFilterByType DEFLATE application/x-font-opentype
      AddOutputFilterByType DEFLATE application/x-font-otf
      AddOutputFilterByType DEFLATE application/x-font-truetype
      AddOutputFilterByType DEFLATE application/x-font-ttf
      AddOutputFilterByType DEFLATE application/x-javascript
      AddOutputFilterByType DEFLATE application/xhtml+xml
      AddOutputFilterByType DEFLATE application/xml
      AddOutputFilterByType DEFLATE font/opentype
      AddOutputFilterByType DEFLATE font/otf
      AddOutputFilterByType DEFLATE font/ttf
      AddOutputFilterByType DEFLATE image/svg+xml
      AddOutputFilterByType DEFLATE image/x-icon
      AddOutputFilterByType DEFLATE text/css
      AddOutputFilterByType DEFLATE text/html
      AddOutputFilterByType DEFLATE text/javascript
      AddOutputFilterByType DEFLATE text/plain
      AddOutputFilterByType DEFLATE text/xml
      AddOutputFilterByType DEFLATE image/svg+xml
    </IfModule>
    <IfModule mod_expires.c>
      ExpiresActive on
      ExpiresByType image/jpeg "access plus 3 day"
      ExpiresByType image/svg "access plus 3 day"
      ExpiresByType image/gif "access plus 3 day"
      ExpiresByType image/png "access plus 3 day"
      ExpiresByType text/javascript "access plus 3 day"
      ExpiresByType text/css "access plus 3 day"
      ExpiresByType application/javascript "access plus 3 day"
    </IfModule>
    ############################################################################
    #### Конец общей части, далее следует собственные директивы .htaccess   ####
    ############################################################################
    Ответ написан
    1 комментарий
  • Почему не отображаются dots в owl-carousel?

    UnluckySerivelha
    @UnluckySerivelha Автор вопроса
    Как оказалось, ошибка была в том, что нужно было просто добавить к контейнеру класс owl-theme
    Ответ написан
    3 комментария
  • Событие нажатия 'Enter' в форме(input)?

    delch
    @delch
    Frontend developer
    В браузерах реализована такая логика, что при нажатии enter находять на элементах внутри form срабатывает событие submit, следовательно можно просто подписаться на него и всё.

    $("form").on("submit", function(){
    // code there
    })
    Ответ написан
    Комментировать
  • Как создать сайт вроде спрашивай.ру?

    HoHsi
    @HoHsi
    Не стоит сразу же замахиваться на большой сервис, начните постепенно. Каждый начинающий программист первым своим проектом грезит сделать убийцу ВК / FB. Скажу сразу, это с первого раза не выйдет. Как не выйдет и с 10. Но! Это не повод, что-бы не развиваться и не учиться. Итак если вы все же решили потрать пару месяцев на обучение, или вы уверены, что пойдет меньше, начните так:

    Шаг первый
    Html. Это язык разметки, на котором написано 100% веба, то есть это необходимая вещь де-факто. Он позволит вам разместить текст на странице, оформить ее.
    В базовой аналогии, это ворд для интернета (кышь Ъ праграммысты, это довольно хорошая аналогия для новичка, продолжим...).

    Это займет +- 1 неделю

    Вам помогут:
    * htmlbook

    Шаг второй
    CSS. Это язык стилизации. Перекрасить текст, увеличить отступы, сделать тень у блоков это к нему. Все крависости в интернете делаются на нем. 99% веба использует для стилизации именно его, так что опять же это стандарт.

    Это займет +- 2 недели

    Вам помогут:
    * Sorax

    Шаг третий
    PHP. Это уже язык программирования (плохой, больной, уродливый, но язык. Да начнется холивар). Он поможет вам понять как это работает, как устроена кухня. Поковыряйте его, обучитесь начальной логике и алгоритмам. Он поможет вам выводить HTML более осмыслено, т.е. вы сможете уже составлять динамические страницы, которые могут подстраиваться под пользователя, добавлять посты, вопросы, картинки и т.д.

    Это займет +- 2 месяца

    Вам помогут:
    * php.net

    Шаг четвертый
    Wordpress. Это почти готовый сайт. В нем уже есть все, что вам нужно. Вы можете писать посты, делать обсуждения и т.д. На его основе вы сможете вылепить что угодно, даже тот самый вопросник. Он написан на PHP, так что он будет дополнять ваши знания. Как только научитись ставить WP, попробуйте написать для него шаблон, потом плагин, и еще и еще. Это закрепит и разовьет ваши предыдущие знания.

    Это займет +- 2 месяца

    Вам помогут:
    * wp-kama

    Шаг пятый
    MySQL. И в частности язык запросов SQL. Это база данных. Они нужны, что-бы хранить информацию вашего сайта в удобном виде. Т.е. по своей сути это таблица экселя, в ней есть поля и их значения. Это так же необходимые знания, так как ваши вопросы из вопросника будух храниться именно там.

    Это займет +- 1 месяц

    Переломный момент
    Наступает переломный, это значит что по истечению полу-года вы должны сесть и подумать, нравится ли вам, что вы делали. Это важно. Так как дальше не будет проще, не будет легче. Начнутся такие вещи как Асинхронность, Брокеры сообщений, ООП, MVC, и другие страшные слова, которые ровно как и предыдущие шаги по-началу будут вас пугать, но потом станут лучшими друзьями.

    Если вам действительно интересно большее, то можете изучить шаги приведенные ниже. Если же вы просто хотите развлечься, то вам вполне хватит перечисленных выше.

    Не спешите так же переходить к шагам ниже, если не уверены в своих силах. Нет ничего плохого, что-бы "посидеть" еще на предыдущих шагах.

    Шаг пятый
    JavaScript. Ура, вы решили, что вы хотите быть программистом, похвально. Этот язык позволит вам сделать ваши страницы более динамичными. Добавить на них анимацию, логику. Этот язык использует 90% веба, так что сомневаться в его значимости нет смысла. Он позволит вам добавить жизнь на ваш сайт.

    Это займет +- 2 месяц

    Вам помогут:
    * Sorax
    * learn.javascript.ru

    Шаг шестой
    Jquery. Это продолжение JS. Это фреймворк (набор готовых функций). Он облегчит вашу работу с JS и позволит делать ее более качественно и быстро.

    Это займет +- 1 месяц

    Шаг седьмой
    Распутье. Вы уже как год программист, отличная работа. Вы уже выросли из яслей и впереди бескрайний океан. И теперь вы должны понять, что вы хотите. Устраивают ли вас сейчас ваши текущие инструменты. Удобные ли они. Не стесняют ли они вас.

    Если вам нравится PHP, он удобен, тогда продолжите изучать именно его, но не стоит бездумно и слепо защищать язык. Если вы чувствуете, что он вас смущает, не противьтесь и просто попробуйте что-то другое. А поверьте этого много.

    Итак развилка:
    Мне нравится PHP, мама я женюсь!
    Ок, тогда вам стоит взглянуть на фреймворки Laravel, Yii 2, вполне хороши. Они довольно мощные и позволят много чего на себе сделать.

    PHP какой-то странный, но мне понравился JavaScript
    Шикарно, значит есть смысл попробовать NodeJS. Это версия языка (Да, я знаю, что нода это среда а не язык, дайте уже объяснить человеку) расчитаная на составление страниц, как PHP. Это очень мощный инструмент, поняв который, вы вряд ли захотите уйти с него. Он поможет вам писать не только сайты, но и приложения для телефонов / планшетов, программы для ПК, возможно игры (но не стоит. По крайней мере с текущим развитием инструментов), демоны, сервисы, консольные приложения и т.д.

    Они оба мне не нравятся
    Что ж, тогда вам могут приглянуться Python, Ruby - эти два языка более близки к PHP, чем JS.
    Или вы за год стали адептом скорости, и не видите большей радости в жизни чем оптимизация и быстрото рендеренга. Ну тогда вам точно понравятся GO и Rust.
    А может быть Dart к тому временем станет мейн стримом, это уже покажет время.

    Что-бы вы не выбрали, это будет хорошим решением.

    Шаг восьмой
    Как говорится, я просто оставлю это здесь. Сейчас нет смысла объяснять, что это, зачем оно и с чем его едет, вы просто взглянете через год на этот список и все поймете.

    CSS:
    * Sass / Less / Stylus

    JS:
    * CoffeeScript / LiveScript / TypeScript
    * Angular
    * Promise

    NodeJS:
    * NPM
    * Express

    Ускорение работы:
    * Gulp
    * Jade
    * Yo

    Остальное:
    * MongoDB
    * MariaDB
    * RabbitMQ

    Шаг 7 и 8 займут у вас всю жизнь
    Это не в коем случае не значит, что язык будет тем же, просто Язык / Технолигия будут заменяться на другую, а смысл будет тем же. Будут новые технологии, будут новые подходы, новые языки. Будет интересно и весело.
    Ответ написан
    15 комментариев
  • Существует ли красивый linux, но не ubuntu?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    Чего за модем-то?
    Всё в убунтах с модемами хорошо, я уже лет 9 ими пользуюсь в разном виде под ней.

    Есть хреновенькие модемы, в которых не соблюдают стандарты - это да.
    Ответ написан