• Как на Битриксе сделать мультиязычный сайт, не прибегая к разбиению на поддомены?

    alexfilus
    @alexfilus
    Senior backend developer
    Если устроят подпапки, то без проблем. Создаём в админке новый сайт, в его настройках выбираете язык en, и укажите имя сайта, скажем тоже en. Создастся папка. В эту новую папку копируем всю публичную часть.
    Если имеются lang файлы у компонентов и их шаблонов, они сами подхватятся. Инфоблоки можно переключить в настройках. Остальные надписи, если они были сделаны с помощью включаемых областей, то выносим эти самые области в папку которая называется как id сайта и везде при подключении подставьте константу SITE_ID или LID, по обстоятельствам)
    Если урлы должны быть одинковыми, то во-первых приготовьтесь быть распятым СЕОшниками, во-вторых понадобятся костыли на куках или сессии.
    Но так лучше не делать в любом случае.
    Ответ написан
    Комментировать
  • 301 редирект с каждой страницы одного домена на такой же адрес другого?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{HTTP_HOST} ^www\.site1\.ru$ [NC]
    RewriteRule ^(.*)$ https://site2.ru/$1 [R=301,L]
    Ответ написан
  • Как в битрикс сделать параметры url в нижнем регистре?

    babarun
    @babarun Куратор тега 1С-Битрикс
    Безумный план моих идей в руках больных людей
    Как это можно сделать?

    Залезть в компонент bitrix:catalog и переделать алгоритм работы умного фильтра.

    Или почему это не нужно делать?

    Вы не сделаете это аккуратно и правильно (потому что сам вендор делал это несколько лет). Вы потеряете возможность нормально обновляться. Если всё таки решитесь на это и предположим перегоните в нижний регистр, то в поисковый индекс попадут урлы которые вам придётся сохранять в таком виде вечно! И уже не о каком рефакторинге речи в будущем идти не будет. В 2012 году для одного магазина написал аналог смарт фильтра с ЧПУ, тогда его ещё не было в коробке. Так вот ребята, которые там остались, вынуждены до сих пор его поддерживать, потому что ссылки с фильтра обросли хорошим весом.

    Сеошники выдвигают в качестве требований такую дичь по одной причине, что бы потом оправдать свои плохие результаты. Они прекрасно знают что это повлияет на результат чуть больше чем на ноль процентов. Но когда придут подписывать акт о закрытии работ и на вопрос почему нет результата, первое что они скажут: "Ваши айтишники не выполнили наши требования".

    Сеошник, который собирается продвигать такие ссылки: site.ru/catalog/?arrFilter_P7_MAX=&arrFilter_P7_MI... должен с позором сдать партбилет.
    Ответ написан
    Комментировать
  • Как валидировать телефон с регуляркой на JavaScript?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    /\+7\(\d{3}\)\d{3}-\d{2}-\d{2}/
    https://regex101.com/r/jXMk30/1
    Ответ написан
    Комментировать
  • Как в Битриксе перенести "Умный фильтр"?

    @sergey_harchevnikov
    Web программист
    Копируем компонент умного фильтра в свой шаблон.
    В своём шаблоне находим папку с умным фильтром(\templates\название
    _шаблона\components\bitrix\catalog.smart.filter\.default) открываем template.php

    Находим div с которого наченается верстка умного фильтра и перед ним вставляем обвертку
    <?$this->SetViewTarget("left_area");?>
    Находим конец верстки умного фильтра и закрываем обвертку
    <?$this->EndViewTarget("left_area");?>

    Заходим в то место где надо вывести умный фильтр, например в sidebar.php(или header.php) и вызываем обвертку в которую обвернули умный фильтр

    <?$APPLICATION->ShowViewContent("left_area")?>
    Ответ написан
    5 комментариев
  • Можно ли использовать $APPLICATION->ShowProperty() в коде шаблона компонента?

    randomizex
    @randomizex Автор вопроса
    http://resume.web-ivan.ru
    Ярослав Александров, Евгений Спасибо, ответ ясен. Просто иногда очень хочется )
    Еслиб в этот вызов кешировалась строка которая позднее разбералась перед выводом, и подменялось ее значение уже перед самым выводом (как я думал) я бы получал необходимый эфект. Но как вижу эти функции ShowProperty(), ShowTitle() по другому работают (закрывают текущий буфер создают, еще один для вывода результата функции, далее закрывают его и открывают новый) вообщем вообще не так как я думал. Следовательно при кешировании компонента этого всего не происходит, а получается эфект что кешируется только часть вывода компонента после вызова ShowProperty().

    Выводы
    1) ShowProperty(), ShowTitle() нельзя использовать в кешируемых частях кода.
    2) Либо выносим их использование в шаблон сайта, либо на некешируемые страницы комплексных компонентов (типа detail.php section.php news.php и тд.)
    Ответ написан
    Комментировать
  • Можно ли использовать $APPLICATION->ShowProperty() в коде шаблона компонента?

    alexyarik
    @alexyarik
    Битрикс разработчик
    Такого плана задача есть в экзамене №2 ех2-109 "Изменить фон в шапке"
    Вот я уже отвечал на похожий вопрос Как вывести свойство раздела в Битрикс?
    Ответ написан
    6 комментариев
  • Битрикс: экзамен 1. Как реализовать различное отображение информации в шапке в зависимости от времени?

    DMityaev
    @DMityaev Автор вопроса
    системный аналитик
    Спасибо. Сделал через функции самого PHP, все оказалось просто:

    <div class="phone"
    
    <?
    $Now = date(H);
    $WorkDayStart = 9;
    $WorkDayEnd = 18;
    If ($WorkDayStart < $Now and $Now < $WorkDayEnd): ?>
    
    
    <?$APPLICATION->IncludeComponent(
    "bitrix:main.include",
    "",
    Array(
    "COMPONENT_TEMPLATE" => ".default",
    "AREA_FILE_SHOW" => "file",
    "AREA_FILE_SUFFIX" => "inc",
    "EDIT_TEMPLATE" => "",
    "PATH" => "/include/telefon.php"
    )
    );?> 
    
    <?else:?>
    
    <?$APPLICATION->IncludeComponent(
    "bitrix:main.include",
    "",
    Array(
    "COMPONENT_TEMPLATE" => ".default",
    "AREA_FILE_SHOW" => "file",
    "AREA_FILE_SUFFIX" => "inc",
    "EDIT_TEMPLATE" => "",
    "PATH" => "/include/email.php"
    )
    );?>
    
    <?endif?>
    </div>
    Ответ написан
    Комментировать
  • Почему неверно отображается инфоблок в админке битрикс?

    smilingcheater
    @smilingcheater
    Недонастроен опенсервер. Пробуют скачаться css/js из папок, начинающихся с точки (.../.default/...)
    Надо в конфиге апача удалить
    <LocationMatch "/\.(?!well-known)">
        Require             all denied
    </LocationMatch>

    В конфиге Nginx удалить
    location ~ /\. {deny all;}
    Ответ написан
    2 комментария
  • Почему не выводится пагинация на странице WordPress?

    @mrtall
    PHP Developer
    После $my_query = new WP_Query($args); попробуйте добавить $GLOBALS['wp_query'] = $my_query;
    Ответ написан
    Комментировать
  • Как работать с gulp-file-include?

    @FoxFka
    На сколько я понимаю - этот плагин не предназначен для автоматической сборки файлов. То есть ваш page.html Вам в любом случае придется сделать вручную, забив в него каркас html-файла. А вот включать в него блоки с разными параметрами как раз можно и нужно при помощи плагина. Для того, чтобы файлы шаблонов блоков не попадали в сборку на мой взгляд лучше всего поступить примерно следующим образом.
    Можно добавлять некий единый префикс для всех файлов блоков. Во-первых это даст возможность привязаться к этому префиксу при настройке task, а во-вторых Вы, вернувшись к работе над проектом через некоторое время быстро сможете отличить файлы шаблонов от блоков.
    Выглядеть это все может так:
    gulp.task('html:build', function() {
     gulp.src('src/[^_]*.html')
    .pipe(fileinclude({
      prefix: '@@',
      basepath: '@file'
    }))
    .pipe(gulp.dest('build/')); 
    });

    Эта задача будет отрабатывать на всех html файлах директории src, имена которых НЕ начинаются с символа "_"
    Далее, чтобы подключить файл блока в ваш шаблон нужно создать его, не забыв добавить "_" в начало. Например "src/_includes/_module.html". Подключить его в обрабатываемый файл src/index.html можно, добавив в нужное место
    @@include('./_includes/_module.html')
    При запуске таски html:build в вашей папке /build появится файл index.html, включающий в себя содержимое файла module.html
    Это базовая схема, которую можно расширять в зависимости от ваших потребностей. Вся инфа для этого есть в документации и примерах.
    Ответ написан
    Комментировать
  • Как правильно администрировать VPS?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ни в коем случае не ставить никаких ISP Manager / Vesta / CPanel, иначе никогда не научитесь тому, чему хотите научиться. Кроме того, они жрут ресурсы. Даже Vesta, которая самая легкая, их жрет прилично, а я сильно сомневаюсь, что у вас VPS c 8+ Gb памяти.

    Изучать надо по урокам и статьям, читая мануалы и best practices по каждому package. Порядок, плюс-минус, таков:

    - развернули ось
    - сделали сразу апдейты
    - создали и настроили swap
    - поменяли пароль рута на что-нибудь супер-мега-сложное (его мы использовать все равно не будем)
    - создали себе обычного юзера с паролем нормальной сложности (он будет использоваться для sudo)
    - дали юзеру права sudo
    - закрутили гайки по SSH - сменили порт, запретили вход руту и вход по паролю (только по ssh-ключам), разрешили вход только одному своему новому логину
    - настроили UFW - простой, но эффективный firewall на основе iptables - default deny, allow http, https, свой кастомный ssh-порт. Если логиниться будете только из нескольких мест (офис, дом) - можно вообще ssh разрешить только на эти IP.
    - sudo dpkg-reconfigure tzdata чтобы установить свою временную зону, так логи потом легче читать и понимать
    - настроили logrotate
    - настроили logwatch
    - настроили Postfix, чтобы сервер вам письма мог слать (мы его настраиваем на внешний мейлер, например Mandrill, чтобы все письма точно в спам не падали)
    - настроили fail2ban (потом, после установки и настройки веб-сервера и сайтов, в fail2ban можно дополнения писать, например мы на WordPress-сайтах мониторим попытки авторизации в админку и блочим тем же fail2ban)
    - дальше ставим все что нужно - Git, Nginx, HHVM, PHP5-FPM, MariaDB, Memcached/Redis и так далее.

    Регулярно заходите на сервер, делайте apt-get update && apt-get dist-upgrade.

    p.s.: это по ubuntu/debian, для других систем все то же самое, но packages и команды могут немного отличаться
    Ответ написан
    26 комментариев
  • Какие название используете для классов в HTML/CSS?

    GoodProject
    @GoodProject
    Верстальщик
    Лови

    Основные
    .wrapper - /*обвертка сайта*/
    .header - /*верхняя часть сайта*/
    .sidebar - /*сайдбар (левая или правая часть сайта)*/
    .content - /*тело сайта (центральная часть)*/
    .footer  - /*нижнаяя часть сайта*/


    Название блока (обвертка)
    .bl 
    .block 
    .box
    .wrap
    .inner
    .container
    .main


    Секции блока
    .head, .header - /*верхняя часть блока например заголовок*/
    .cnt, .content, .body - /*тело блока например текс с картинкой*/
    .footer - /*нижняя часть блока к примеру дата добавления, категория и т.д.*/


    Колонки
    .column, .col - /*колонка*/

    Списки
    .list
    .item


    Позиционные классы
    .top /* элемент сверху */
    .left /* элемент слева float:left */
    .right /* элемент справа float:right */
    .bottom /* элемент внизу */
    .center /* элемент отцвентрирован  margin:0 auto; */
    .fixed - /*фиксированный элемент postion:fixed */


    Переходы
    .next  - /*следующий*/
    .prev  - /*предыдущий*/
    .last  - /*последний*/
    .first - /*первый*/
    .back  - /*назад*/
    .ahead - /*вперед*/


    Чисельные
    .one
    .thwo
    .three
    .four
    .five


    Размеры
    .xs, .tiny   - /*очень маленький*/
    .s,  .small  - /*маленький*/
    .md, .medium - /*средний */
    .lg, .large, .big - /*большой */
    .xl, .extra-large - /*очень большой*/


    Цвета
    .danger  - /*цвет опасности*/
    .default - /*стандартный цвет*/
    .warning, .error - /*цве ошибки*/
    .success - /*цвет успеха (к примеру верно введн код подтвержления)*/
    .primary - /*основной цвет */


    Кнопки
    .button, .btn - /*кнопка*/
    .loading - /*загрузка*/
    .close - /*закрыть*/
    .open  - /*открыть*/
    .touch - /*клик*/
    .edit  - /*редактировать*/
    .more  - /*больше*/
    .remove  - /*удалить*/
    .logout  - /*выход*/
    .select  - /*выбрать*/
    .divider - /*выпадающийся список меню*/
    .caret, .arrow - /*стрелочка*/
    .up - /* Вверх */
    .down - /* Вниз */
    .delete - /* удалить */
    .reply    - /*ответить*/


    Персона
    .profile - /*профиль*/
    .person - /*человек*/
    .ava, .avatar - /*аватарка, картинка*/
    .name - /*имя*/
    .description - /*описание*/
    .address  - /*адресс*/
    .nickname - /*ник*/
    .birthday - /*дата рождения*/
    .sex - /*пол*/
    .author - /* автор */

    Заголовки
    .title - /*заголовок*/
    .short-title - /*скороченный заголовок*/
    .full-title  - /*полный заголовок*/


    Ссылки
    .link - /*ссылка*/

    Текст
    .text, .txt, .paragraph  - /*текст*/
    .info, .information - /*информация*/


    Картинки
    .image, .img - /*картинка*/
    .icon, .ic   - /*иконка*/
    .bg - /*фоновая картинки или цвет*/


    Формы
    .search, .form-search - /*поиск по сайту*/
    .input - /*текстовый элемент*/
    .form  - /*форма*/
    .form-group - /*группа элементов формы*/
    .help-block - /*текст подсказки*/
    .label - /*название элемента формы*/


    Катагории
    .type - /*тип*/
    .cat, .category - /*катигория*/
    .subcat, .subcategory - /*подкатегория*/
    .section    - /*раздел*/
    .subsection - /*подраздел*/


    Видео
    .video
    .play  - /*пуск*/
    .stop  - /*стоп*/
    .pause - /*пауза*/


    Социальные сети
    .social - /* социальные сети */
    .vk   - /*вконтакте*/
    .fb   - /*фейсбук*/
    .twit - /*твиттер*/
    .inst - /*инстаграм */


    Активные классы
    .none     - /*скрытый элемент*/
    .disabled - /*заблокированный*/
    .active, .current   - /*активный */
    .selected - /*выбраный*/
    .visible  - /*видный элемент*/
    .focus    - /*нажатый*/


    Временные классы
    .time  - /*время*/
    .date  - /*дата*/
    .day   - /*день*/
    .month - /*месяц*/
    .year  - /*год*/


    Очистка
    .clear, .clearfix, .clr - /*очистка*/

    Разделители
    .separator, .divide - /*разделитель вертикальный для слов */
    .br, .line - /*разделитель горизонтальный для блоков*/


    Остоньлые названия
    .logo    - /*лого сайта*/
    .new    - /*новинка*/
    .sale   - /*распродажа*/
    .feedback - /*обратная связь*/
    .support - /*помощь */
    .group  - /*группа*/
    .module - /*модуль*/
    .posters - /*пост*/
    .form   - /*форма*/
    .tabs   - /*вкладки*/
    .slider - /*слайдер*/
    .news   - /*новости*/
    .table  - /*таблица*/
    .full   - /*полный*/
    .breadcrumbs - /*Хлебные крошки*/
    .pagination, .pager - /*Нумерация страниц*/
    .navbar, .nav, .menu, .navigation - /*Навигация (меню)*/
    .dropdown - /*выпадающейся меню */
    .comment  - /*комментарий*/
    .subscription - /* Подписка */
    .special - /* особенный элемент */
    .standard - /* стандартный элемент */
    .screens - /* Скрины */
    .rate - /* рейтинг */
    .online - /* онлайн */
    .panel - /* панель */
    .popup - /* попап */
    .version - /* версия */
    .page - /* страница */
    .banners - /* баннер */
    .map - /* Карта */
    .more - /*еще, подробнее*/
    .tags - /* тег */
    .price - /* цена */


    Взято с этого видео.
    Ответ написан
    2 комментария
  • Webpack. В чем разница между бандлом, чанком и модулем?

    alexfedoseev
    @alexfedoseev
    React & Rails Dev
    Есть два бандла:

    • app.js — для морды
    • admin.js — для админки


    В каждом бандле есть вендорные модули (react, ember, jquery etc.). И модули приложения (то, что написано тобой).

    Каждый бандл можно разбить как минимум на два чанка: собственно приложение и вендорные либы (чтобы пользователь при апдейте приложения не грузил заново вендорные библиотеки, которые не менялись). А если приложение очень большое, то бандл разбивается на ещё больше чанков: например чанк для интерфейса личных сообщений, чанк для ленты новостей и т.д. Такие чанки грузятся по запросу (когда пользователь переходит на соответствующий раздел / интерфейс).
    Ответ написан
    2 комментария
  • Node SASS vs Dart SASS. Какой производительнее при каких условиях?

    @Flying
    1. dart-sass - reference implementation языка т.е. является образцом того как должен работать язык. node-sass binding libsass (реализации спецификации языка на C++) к node.js.

      dart-sass содержит в себе все последние фичи языка, к примеру там уже есть поддержка sass modules, libsass отстаёт, а node-sass отстаёт от libsass. За пруфами - сюда и сюда
    2. libsass производительнее, местами - существенно. К примеру в моих тестах интенсивная работа с sass maps в libsass примерно в 10 раз быстрее чем в dart sass. Насчёт микросекунд - у меня есть проекты которые по 15-20 секунд компилируют только стили на node-sass, на dart-sass всё намного медленнее
    3. Приведённые ссылки - сравнение тёплого с мягким. Есть реализации языков, а есть плагины для их подключения к различным сборщикам. sass - сама реализация языка, gulp-sass - binding для Gulp, sass-loader - binding для Webpack
    Ответ написан
    Комментировать