За последнюю неделю заметил на форуме несколько тем, в которых шло бурное обсуждение ЧПУ (человека-понятные ссылки на товары, страницы и т.п.) на отдельных компонентах каталога. Тема всегда оставалась сложной и каждый пытался в ней разобраться, как мог. Отвечать по этой теме сложно, а если подробно, то и неудобно в формате форума, поэтому родилась идея выпустить эту статью.

В 1С-Битрикс есть комплексный компонент управления каталогом bitrix.catalog в котором все достаточно просто, ставится он по умолчанию предварительно настроенный.

При всех его достоинствах в нем есть один недостаток, он поставляется как есть и может подойти не для всех.

А если нужна большая гибкость? Например, требуется сделать разделы, оформив их в своем дизайне или своей структурой представления информации. То начинаются танцы с отдельными компонентами каталога, на которых все это и собирается.

В начале я бы хотел разобрать более старую схему настройки, которая работала до последнего релиза 15.5 (первая часть статьи). А потом показать, что сделано в продукте в последнем 15.5 релизе, чтобы облегчить достаточно сложную настройку ЧПУ (вторая часть статьи).

Задачи которые мы решаем:

  • Требуется показать раздел, в котором будет своя уникальная страница раздела, файл (index.php ).
  • На всех страницах будет возможность переходить в подразделы данного раздела, файл (list.php )
  • При открытие каждого подраздела заголовок на странице подраздела должен изменится в соответствие с переходом в нужный подраздел
  • Должна открываться карточка товара в рамках этого раздела или подраздела, файл (detail.php ).
  • Требуются хлебные крошки (навигационная цепочка в верхней части страницы), причем на основной странице раздела они не будут отображаться, а на всех подразделах и элементах будут.
Я не любитель делать ненужное программирование, поэтому все решение будет собрано на штатных компонентах 1С-Битрикс, с одной единственной строчкой кода.

Настройка (решение):

Создание раздела файл index.php

Для решения нам понадобится создать небольшую структуру из папки и файлов:

  • Создаем в корневом разделе сайта папку, например (что бы проще понимать для какого раздела эта папка, я взял для названия символьный код раздела): shop-for-confectioner
  • Нам понадобится создать в этой папке три файла: index.php, list.php, detail.php
  • Размещаем в этих файлах компоненты:
  • В файл index.php добавляем компоненты: bitrix:catalog.section.list и bitrix:catalog.section
  • В файле list.php добавляем компоненты: bitrix:catalog.section.list (не обязательный, если не нужна навигация на нижних уровнях), bitrix:news.detail (этим компонентом выведем заголовок раздела), bitrix:catalog.section и завершим все еще раз bitrix:news.detail (покажем SEO текст для раздела) - можно было бы упростить, но хочется показать некоторые моменты упрощающие жизнь под требования SEO специалистов и большую гибкость взаимодействия между компонентами.
  • В файле detail.php добавляем компоненты: bitrix:catalog.section.list и bitrix:catalog.element . Можно сразу добавить схему, вида популярное в этом разделе, добавляем еще bitrix:catalog.section
Выглядит как сложный космический корабль, но даст вам отличную гибкость в формирование разделов с подразделами.

Страницы созданы, компоненты размещены, приступаем к настройке. Нам понадобится инфоблок, в котором лежит наш прекрасный раздел со своими подразделами, который мы и будем выводить. Поехали.

Настройка главной страницы раздела

Давайте разберем настройку первого компонента, bitrix:catalog.section.list , с помощью него мы выведем навигацию по подразделам, нашего основного раздела.

Единственный кусочек в настройке, на который нужно обратить внимание, это указание URL задуманного нами ЧПУ . Он приведет нас к содержимому раздела.

Мы помним, что папка для раздела каталога называется у нас: shop-for-confectioner

А путь ЧПУ я хочу, что бы был вида: /shop-for-confectioner/название-подраздела/название-элемента/

Отлично, смотрим результат настройки:

Отобразились подразделы, в разделе над которым мы работаем.

Разберем настройку следующего компонента bitrix:catalog.section . Он выведет нам отобранный список элементов из всех подразделов нашего раздела. Например, выведем список элементов самых просматриваемых в данном разделе.

В этом компоненте настройка чуть посложней. Нам нужно задать следующее:

  • URL ведущий на страницу с содержимым радела, прописывать путь к нашей папке.
  • Нужно указать URL , который мы хотим видеть при выводе содержимого из раздела. Где SECTION_CODE - построит нам путь из подраздела, которые есть в нашем разделе. Например, у нас структура каталога /магазин кондитера/краски/элементы краски/ во всех разделах прописаны символьные коды, на основание которых и будет построен полный путь. Следующий элемент настройки ELEMENT_CODE выведем в ЧПУ символьный код элемента. Давайте посмотрим, где прописываются символьные коды у разделов и элементов (я покажу для раздела, для элемента схожий).

Естественно я не прописываю символьные коды вручную, пусть этим занимаемся платформа 1С-Битрикс. Для этого, при создание инфоблока, я включил соответствующую настройку:

Не буду подробно останавливаться на галочках данной настройки, тут интересна только одна «Использовать внешний сервис перевода », в ней я настраиваю перевод через Яндекс, указав ключ в настройках «Главного модуля ».

  • Ну и последний элемент настройки, нужно указать, где передается код группы. Указываю тот же - SECTION_CODE
Смотрим результат настроек:

Отобразился список товаров из раздела.
Автоматически формируемый вывод подразделов

Страница раздела достаточно простая, она дает возможность вывести туда дополнительную информацию, баннеры с акциями для этого раздела, SEO тексты и т.п. они будут уникальные для этого раздела, но нам придется делать для каждого раздела свой набор файлов, что не всегда оправданно.

Вот пример уникального раздела, даже со своим дизайном: http://tortik39.ru/shop-for-confectioner/

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

Настройка страницы отображения подразделов в разделе

Файл - list.php - первым компонентом в нем идет bitrix:catalog.section.list . Разбирать мы его не будем, так как он полностью повторяет настройки как и в файле index.php

А вот следующий компонент необычный - bitrix:news.detail . Этим компонентом, мы выведем из отдельного инфоблока заголовок выбранного подраздела, а его напарником ниже, содержимое SEO текста , которое описывает этот раздел. Это будет такая динамическая структура, которая будем меняться в зависимости от выбранных подразделов, в нашем разделе.

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

Настраиваем инфоблок:

Создаем инфоблок «Разделы каталога » - в нем нет свойств и каких либо специфичных настроек. Обычный инфоблок, с выключенной галочкой «торгового каталога ».

Инфоблок создан. Теперь в нем нужно создать столько записей, сколько у нас будет разделов, для которых мы выведем название и SEO текст внизу страницы подраздела или раздела.

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

Идем в наш торговый каталог, в котором уже есть наши разделы с товарами и смотрим их символьные коды:

И на основание этих символьных кодов создаем записи в нашем новом инфоблоке с названиями и SEO текстом внутри, и с такими же символьными кодами. Ниже показаны созданные статьи и заголовки, которые нам пригодятся.

Давайте посмотрим одну такую запись внутри:

Название у нас будет заголовком раздела, для первого компонента: bitrix:news.detail . А текст мы разместим во вкладке «Подробно »:

Более «правильную » связь можно сделать, связав инфоблоки через свойство. И тогда не нужно будет контролировать одинаковость символьных кодов, но зато потребуется при создание элемента раздела каталога, выбирать что мы связываем с ним, в виде нашего элемента статьи. Оба вариант имеют свои плюсы и минусы, мне понравилось в данном случае более простое решение.

Самое сложное мы сделали, создали элементы в связном каталоге, проконтролировали, что каждый элемент имеет такой же символьный код, как и у раздела.

Приступаем к настройке bitrix:news.detail

Вся настройка сводится к тому, что бы выбрать наш инфоблок, где хранятся статьи, указать в поле «Код новости » следующий код: ={$_REQUEST[«SECTION_CODE"]}

Этим кодом мы будем выбирать новость с таким же символьным кодом, который будет взят с символьного кода раздела.

Ну и напоследок, отключить все лишнее к выводу, фактически нам нужно вывести только заголовок.

Для второго компонента bitrix:news.detail , который выводится внизу страницы, мы делаем полностью аналогичную настройку. Только выводим вместо заголовка саму новость, наш SEO текст .

Давайте посмотрим, что у нас получилось и как это работает. Я записал небольшой видеоролик для показа динамики.

В вашем браузере отключен JavaScript

Получилось то, что нам требовалось.

Теперь нам нужно вывести список товаров из подраздела, нашего раздела, настроить компонент bitrix:catalog.section

Указываем в пункте «Код раздела » выражение ={$_REQUEST[«SECTION_CODE"]} Тем самым выберем символьный код раздела, для которого будем выводить элементы.
Прописываем шаблоны ссылок, для страницы раздела, и элементов раздела. Не забываем о переменной, в которой передается символьный код раздела. Остается настроить нужные данные в компоненте и можно смотреть что получилось.

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

Настройка страницы детальной карточки

Нам нужно настроить страницу, которая будет отображать детальную карточку товара, файл detail.php

В файле страницы у нас три компонента. Останавливаться на компоненте bitrix:catalog.section.list мы не будем, его настройки полностью аналогичны описанным выше.

Второй компонент bitrix:catalog.element как раз и отвечает за отображение детальной карточки товара, давайте его настроим.

Нам нужно получить символьный код раздела и элемента. Делаем мы это, прописывая две строчки для поля «Код элемента » это будет ={$_REQUEST[«ELEMENT_CODE»]} , а для «Кода раздела » это будет ={$_REQUEST[«SECTION_CODE»]} .

Смотрим, что у нас получилось:

Открылась детальная карточка, мы все настроили корректно.

У нас на странице detail.php остался еще один компонент, который мы хотели настроить на вывод популярных товаров в этом разделе, это компонент bitrix:catalog.section .

Давайте подумаем, что такое популярное в разделе. У нас есть фильтр - просмотры, предполагаем, если элементы больше всего смотрят - значит они популярны. Мы можем вывести список элементов отобранных по данному фильтру «самые просматриваемые в разделе ».

Настройка компонента bitrix:catalog.section на вывод популярных товаров

Традиционно нам нужно передать в «Код раздела » символьный код раздела, для которого и будем отбирать нужные нам элементы, прописываем ={$_REQUEST[«SECTION_CODE"]}

Традиционный блок с настройкой «Шаблона ссылок »

Указываем в компоненте настройку отбора по фильтру, показ самых просматриваемых элементов.


И вот в нашей детальной карточке товара, для нашего раздела, показываются самые популярные товары.


Новая адаптивная постраничная навигация

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

Давайте посмотрим, где это настраивается:

В блоке настроек «Настройка постраничной навигации » необходимо выбрать шаблон с названием «ROUND »

Мы настроили страницы, но ничего не работает

Все верно! В процессе описания я вам показывал, что у меня открываются страницы, все работает, но это не совсем так. Чтобы вся схема заработала, нужно выполнить еще два шага.

Первый шаг - настройка инфоблока

В инфоблоке необходимо прописать, «URL страницы информационного блока » - указываем в поле наш каталог: #SITE_DIR#/shop-for-confectioner/

В поле «URL страницы раздела ЧПУ для раздела: #SITE_DIR#/shop-for-confectioner/#SECTION_CODE#/

В поле «URL страницы детального просмотра » прописываем, как будет строиться ЧПУ для детальной карточки товара: #SITE_DIR#/shop-for-confectioner/#SECTION_CODE#/#ELEMENT_CODE#/

Ошибки в формирование адресов в инфоблоке, очень часто не приводят к потере работоспособности страниц, и обычно все не обращают на них внимание. Это опасно!

Страницы у вас будут открываться и все будет работать. Но возникнут проблемы с поиском и открытием страниц выдачи в поиске. А вторым проблемным местом станет автоматика формирования файла sitemap.xml , что приведет к неправильному индексированию вашего сайта. Будьте внимательны, и проверяйте эти два места - в них сразу можно увидеть проблему. Не смотрите только на открытие страниц или детальной карточки.

Второй шаг - это создание двух правил обработки адресов

На этом шаге делают ошибки 100% новичков и очень большой процент разработчиков, на этом шаге от вас потребуется написать регулярное выражение для обработки ЧПУ .

В следующей статье, я покажу как не делать этот шаг, и как продукт все сделает за вас. Но эта возможность появилась с релиза 15.5 - поэтому я опишу этот шаг здесь.

И так идем в раздел «Правила обработки »

Нам нужно создать два правила: одно будет создано для вывода разделов, а второе будет обрабатывать показ детальной карточки товара.

Правило создания ЧПУ для разделов

В правиле нам потребуется прописать всего три строки.

Поле «Условие » - это и есть регулярное выражение, которое будет выводить наши разделы. Опустим в этой статье как пишется регулярное выражение, это тема скорей целой книги и разработчикам имеет смысл почитать об этом. Можно просто скопировать мое регулярное выражение: #^/shop-for-confectioner/([\w\d\-]+)(\\?(.*))?#

Поле «Файл » - указываем пусть к нашему файлу list.php , который отвечает за отображение наших разделов: /shop-for-confectioner/list.php

Поле «Правило » - нужно указать переменную, в которой передается символьный код раздела, мы в настройках выше использовали SECTION_CODE , соответственно его и прописываем: SECTION_CODE=$1

Правило создания ЧПУ для элементов

Аналогично правило будет содержать три строки, но немного сложнее:

Поле «Условие » расширяется добавлением кусочка отвечающего за элемент: #^/shop-for-confectioner/([\w\d\-]+)/([\w\d\-]+)(\\?(.*))?#

Поле «Файл » содержит путь к файлу, который отвечает за показ карточки товара, это наш файл detail.php : /shop-for-confectioner/detail.php

Поле «Правило » содержит две переменные, в которых передаются символьные кода, раздела и элемента: SECTION_CODE=$1&ELEMENT_CODE=$2

Настройки закончены, и если вы все сделали правильно, у вас все должно заработать!

Но мы не закончили с заданием, нам еще необходимо сделать хлебные крошки.

Настройка хлебных крошек

Компонент хлебных крошек у нас лежит в header.php шаблона нашего сайта. Настройка компонента очень простая:

На скриншот поместились все настройки компонента.

Основные настройки делаются в компонентах расположенных на трех наших страницах, которые мы создали ранее.

Давайте вспомним задачу:

  • Требуется вывести хлебные крошки в подразделах раздела, и в детальной карточке элемента, но не выводить в разделе.
Решение:

Соответственно нам нужно в файлах list.php и detail.php поставить соответствующие галочки.

Для файла list.php идем в компонент bitrix:catalog.section и ставим следующую галочку.

При переходе в разделы, в хлебные крошки попадет название соответствующего раздела.

Для файла detail.php идем в компонент bitrix:catalog.element и ставим следующие галочки.

При переходе к элементу в хлебные крошки попадет как название раздела, так и название элемента.

Давайте посмотрим, что у нас получилось:

Для главной страницы раздела index.php

Для страниц подразделов нашего раздела, файл list.php

Для страницы детальной карточки товара, файл detail.php

Запрет отображения хлебных крошек на главной странице раздела

Нужно вызвать на редактирование файл index.php и прописать в нем одну строку: $APPLICATION->SetPageProperty ("NOT_SHOW_NAV_CHAIN", «Y»);

Данная строчка запрещает выводить хлебные крошки.

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

Пишите свои вопросы в комментариях, я с удовольствием на них отвечу.

Дисклеймер: Этой статьёй я не хочу унизить или возвысить кого-либо из пользователей, разработчиков, веб-порталов, сервисов и прочих. Приведённые скриншоты в статье, а также комментарии к ним являются субъективным мнением автора и не призывают никого с ним считаться.

Теперь к делу. Идея написания этой статьи пришла мне крайне давно. С того самого момента я собирал тезисы, примеры и мысли в кучу, а теперь постараюсь изобразить их здесь таким образом, чтобы вы смогли развить эту мысль как развил её я в своей голове. Надеюсь, у нас получится. Заранее прошу прощения за эмоциональное повествование.

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

Внушительное количество материалов в интернете представлено в ужасном виде. Да, вот теперь это похоже на тезис.

Под ужасным видом я подразумеваю то представление, с которым подаётся материал. Возьмём, к примеру, “захватывающую новость”, откроем на телефоне и попытаемся прочитать.

Если вы усмехнулись, это хорошо. Но на самом деле хорошего здесь мало. Мы ведь зашли, чтобы прочитать про … Подождите, а про что мы вообще хотим прочитать, где заголовок? Ок, давайте откроем захватывающую новость на десктопе.

Ах да, блокировка Telegram в России… Какая жалость, – думали мы несколько месяцев назад. И правда, огромная жалость, что мы не можем нормально прочитать столь захватывающую новость.
Уверен, вы уловили, к чему я клоню. Конечно, блокировка Telegram - это и правда плохо. Но что по-настоящему худо, это чума всплывающего/излишнего/вторичного контента.

И так мобильный интернет выглядел не только в 2017, он выглядел так даже немного раньше, и сейчас стало только хуже. Кстати, там же в треде вы можете найти огромное количество примеров подобной схемы. Это показывает актуальность, масштаб и серьёзность этой проблемы. И в качестве подтверждения очередной пост с grumpy.website:


→ Ссылка

Страдает не только мобильный интернет, возьмём к примеру небезызвестные крупные сайты

От контента на первом экране только заголовок, и на том спасибо.


Ура, тут помимо заголовка мы смогли увидеть ещё кусок текста, автора и даже дату публикации, феноменально!


Только третья часть страницы доступна для чтения, не больше.


Прочитайте название статьи. Было бы смешно, если бы не было так грустно.


Что тут вообще происходит?

Я мог бы привести ещё уйму примеров, но уже достаточно съел трафика при загрузке изображений на этой странице. Проблема в том что, мы как будто разучились подавать контент, мы разучились делать достойный user friendly design, мы разучились верстать. То что мы даём пользователю, похоже на плевок в лицо. Во главу мы стали ставить совсем не контент, он обесценился. Нам важнее показать как можно более релевантную и привлекательную рекламу, лишь бы заполучить этот жалкий клик. Мы хотим открестится от судебных тяжб за отсутствие баннера о хранении персональных данных или галочки, но нас совершенно перестало заботить, как это будет сделано. Это очень грустно и бесчеловечно, товарищи.

Но мало обратить внимание на проблему. Кто-то наверняка скажет: “Ну и что же ты предлагаешь нам делать, умник?! У нас и без этого завал работы/урезанный бюджет/слишком заняты/вставьте свой вариант”. А я отвечу. Мы умные и грамотные специалисты, почему бы не проявить каплю энтузиазма, потратить на 15 мин больше и сделать круто и функционально. Например:

Кстати об изящных примерах – не так давно к нам в офис приходил Виталий Фридман. Он говорил о многих вещах, в том числе о человечности, о дизайн- системах и приводил большое количество необычных примеров. Вот ссылка на запись встречи, для вдохновения:


Примеров, помимо тех, что приводит Виталий, к счастью, ещё огромное множество, и веб не так безнадёжен, как могло показаться. Но проблема комплексности веба не является новой. Так, например, Франк Химеро (дизайнер, иллюстратор, автор книги Shape of design) в одном из своих выступлений говорил о самой проблеме, и как можно просто подать идею, приводя чёткий список технических требований. На Хабре есть стоящий , а также ссылка на оригинал, очень рекомендую к прочтению.

Комплексность веба в этом контексте задевает все направления: аналитику, дизайн и, конечно же, разработку. Но я бы не хотел вдаваться в подробности, потому что это тема для отдельного рассуждения.

Ридеры

На помощь приходят ридеры. Это системы, позволяющие представить контент в удобном книжном формате. Они исправляются за нерадивых веб-мастеров (здесь я имею в виду участников всех циклов разработки веб-сайта), бросая пользователю спасательный круг.

Так, например, Safari уже предлагает пользователю переключиться в Reader view и читать интересную статью в опрятной вёрстке, без лишнего мусора.

Telegram с его потрясающим Instant View(IV) для 2274 ресурсов (а может уже и больше). Эту идею я считаю одной из лучших и прорывных в мессенджерах за последние несколько лет, а за реализацию вообще снимаю шляпу. Подробнее о технологии и о том, как она воплощалась, можно почитать . Если читать лень, вкратце объясню: отправив ссылку на поддерживаемый IV веб-сайт, Telegram предлагает открыть её прямо в приложении, и делает это за пару миллисекунд.

Не стоит объяснять, что в обоих случаях в проигрыше остаётся владелец ресурса, так как кроме основного текста страницы, больше ничего передать или получить от пользователя не удастся. Как следствие, это создаёт определённые трудности в статистике, подаче релевантного контента и прочих маркетинговых приёмах.

Что делать?

Главное – быть человеком.

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

Другой случай, если ваша цель продать, любой ценой нажиться при помощи рекламы, либо увести пользователя на другую страницу/ресурс. Тогда вы, конечно, можете не акцентировать внимание на тексте, просто поместите Lorem ipsum или какое-нибудь клише, чтобы keywords были побольше. Впрочем, сам текст не так важен, можно, например, смешать оба вышеупомянутых варианта, дабы увеличить коэффициент уникальности. Затем добавьте на страницу пару-тройку баннеров, несколько всплывающих окон, и обязательно нужно обвесить это всё аналитикой, чтобы понять, какой баннер эффективнее: верхний, тот, что под ним, или тот, что справа от двух предыдущих. Но после всего этого не забудьте задать себе вопрос: а нужен ли вам в таком случае текст? Как только справитесь с первым вопросом, попробуйте ответить на второй. Вы создали эту веб-страницу для людей?

Action items

Если позволите, у меня накопилось несколько советов, которые могут помочь улучшить ситуацию, если вы в нее попали.

Первое, нужно понять, содержит ли ваш продукт/сайт/приложение/вставьте свой вариант те признаки, о которых мы говорили выше. Если так, то далее вам предстоит выяснить, кто отвечает за каждый элемент этой конструкции. Готов спорить, что большинство вопросов появится именно к маркетинговой стороне вашего продукта. Если это не так, не переживайте, мы с вами ещё обсудим, как быть дальше.

Маркетинг

Обычно, маркетинг не задумывается о том, насколько опрятно будет выглядеть сайт у конечного пользователя. Это понятно, они и не должны думать об этом. Маркетологи просто делают свою работу и, простите за грубое обобщение, только и думают, каким бы образом лучше запромоутить продукт. Для решения этой задачи они применяют сторонние тулзы, придумывают гениальные кампании и т.д. Важно понять, что они решают задачу развития и распространения продукта .

UX (Web Design)

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

Вы, наверное, подумали, что я хочу обвинить во всём разработчиков? Ну уж нет. Если команда не может выпустить крутой, чистый, юзабельный продукт, не стоит валить всё на development. Конечно, исходя из написанного выше, можно сделать вывод, что все концы сходятся именно в коде разработчика. Так и есть, конечный результат появляется именно при написании кода , но разработчик не может взять и не добавить все гениальные идеи придуманные выше (выше по тексту).

А как тогда, “чего ты нас путаешь, вообще уже непонятно кто виноват и кто должен всё это фиксить”?

Команда , именно команда, выступает начальным и конечным звеном на всей стадии разработки. Весь цикл задачи должен решаться именно совместно. Например, на стадии возникновения “гениальной” идеи про баннер на полстраницы, UX и разработчик покрутят у виска и не допустят даже мыслей о таком варианте. При добавлении пятого всплывающего подряд окна на страницу, произойдёт то же самое, и идея будет задушена на корню. Работайте в команде, на всех этапах разработки проекта, потому что конечный продукт – это результат совместной работы . Вот вам первый Action Item.

В ситуации, когда у вас уже используются подобные “гениальные решения” в production, предлагаю обратиться к ответственному за решение, и обсудить его цель и внешний вид. Уверен, что эту же задачу можно решить более безобидным способом.

На техническом поприще есть множество решений для улучшения User Experience, но я приведу только часть самых интересных, на мой взгляд.

Получает все данные указанного блога из таблицы блогов и опций блога.

Итоговые данные будут содержать в себе все данные WP_Site и данные из опций блога: blogname , siteurl , post_count , home

Результат работы функции кэшируется.

Функция сама использует switch_to_blog() когда это нужно.

Возвращает

WP_Site/false. Данные блога или false, если не удалось получить блог.

WP_Site Object ( => 1 => multisite.ru => / => 1 => 2016-05-10 20:47:00 => 0000-00-00 00:00:00 => 1 => 0 => 0 => 0 => 0 => 0 => Главный Cайт => http://multisite.ru/wp => => http://multisite.ru)

Использование

get_blog_details($fields, $get_all); $fields(число/строка/массив)

Данные по которым будет определен блог. Можно указать ID блога или строку blogname .

Или можно указать массив с ключами: "blog_id" или "domain" и "path" . По этим данным будет найден нужный блог.
По умолчанию: null (текущий блог, сайт)

$get_all(логический) true - получить все данные блога.
false - только данные из таблицы wp_blogs .
По умолчанию: true

Примеры

#1 Получим URL текущего блога

$details = get_blog_details(); echo $details->siteurl;

Код get blog details : wp-includes/ms-blogs.php WP 5.2.2

get_row($wpdb->prepare("SELECT * FROM $wpdb->blogs WHERE domain IN (%s,%s) AND path = %s ORDER BY CHAR_LENGTH(domain) DESC", $nowww, $fields["domain"], $fields["path"])); } else { $blog = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->blogs WHERE domain = %s AND path = %s", $fields["domain"], $fields["path"])); } if ($blog) { wp_cache_set($blog->blog_id . "short", $blog, "blog-details"); $blog_id = $blog->blog_id; } else { return false; } } elseif (isset($fields["domain"]) && is_subdomain_install()) { $key = md5($fields["domain"]); $blog = wp_cache_get($key, "blog-lookup"); if (false !== $blog) { return $blog; } if (substr($fields["domain"], 0, 4) == "www.") { $nowww = substr($fields["domain"], 4); $blog = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->blogs WHERE domain IN (%s,%s) ORDER BY CHAR_LENGTH(domain) DESC", $nowww, $fields["domain"])); } else { $blog = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->blogs WHERE domain = %s", $fields["domain"])); } if ($blog) { wp_cache_set($blog->blog_id . "short", $blog, "blog-details"); $blog_id = $blog->blog_id; } else { return false; } } else { return false; } } else { if (! $fields) { $blog_id = get_current_blog_id(); } elseif (! is_numeric($fields)) { $blog_id = get_id_from_blogname($fields); } else { $blog_id = $fields; } } $blog_id = (int) $blog_id; $all = $get_all ? "" : "short"; $details = wp_cache_get($blog_id . $all, "blog-details"); if ($details) { if (! is_object($details)) { if (-1 == $details) { return false; } else { // Clear old pre-serialized objects. Cache clients do better with that. wp_cache_delete($blog_id . $all, "blog-details"); unset($details); } } else { return $details; } } // Try the other cache. if ($get_all) { $details = wp_cache_get($blog_id . "short", "blog-details"); } else { $details = wp_cache_get($blog_id, "blog-details"); // If short was requested and full cache is set, we can return. if ($details) { if (! is_object($details)) { if (-1 == $details) { return false; } else { // Clear old pre-serialized objects. Cache clients do better with that. wp_cache_delete($blog_id, "blog-details"); unset($details); } } else { return $details; } } } if (empty($details)) { $details = WP_Site::get_instance($blog_id); if (! $details) { // Set the full cache. wp_cache_set($blog_id, -1, "blog-details"); return false; } } if (! $details instanceof WP_Site) { $details = new WP_Site($details); } if (! $get_all) { wp_cache_set($blog_id . $all, $details, "blog-details"); return $details; } switch_to_blog($blog_id); $details->blogname = get_option("blogname"); $details->siteurl = get_option("siteurl"); $details->post_count = get_option("post_count"); $details->home = get_option("home"); restore_current_blog(); /** * Filters a blog"s details. * * @since MU (3.0.0) * @deprecated 4.7.0 Use site_details * * @param object $details The blog details. */ $details = apply_filters_deprecated("blog_details", array($details), "4.7.0", "site_details"); wp_cache_set($blog_id . $all, $details, "blog-details"); $key = md5($details->domain . $details->path); wp_cache_set($key, $details, "blog-lookup"); return $details; }

Поиск автоэлектрика с выездом в Москве

Автомобили последних моделей потихоньку трансформируются из чисто механического продукта в сплетение электрики и механики, доля электронных деталей в современных авто доходит скорей всего уже к 50 процентам, и это не говоря про электромобили, в которых нет привычного двигателя, топливной аппаратуры, радиатора и так далее. В наши дни при помощи компьютера возможно откорректировать основную часть характеристик машины, от подсветки приборов до количества подаваемого мотору бензина. Это одновременно удобно и вызывает трудности при ремонте автомобиля.

Лет 20-30 тому водители могли отремонтировать электропроводку в авто только пассатижами и мотком изоленты, в то же время в советских машинах и чинить в принципе не было ничего, зажигание и освещение. В современных моделях без автомеханика уже не факт что самостоятельно даже отыщите какой именно провод куда тянется, поэтому уже при самой маленькой неисправности приходится или вести машину в автомастерскую или нанимать здесь http://avtoelektrik-moskva.ru/ автоэлектрика с выездом. Хотя получается и так что до автомастерской на своих колёсах не приехать, к примеру, сгорела проводка или необходима деактивация автосигнализации, тогда только отыскать автоэлектрика с выездом, чтобы на месте поломки определил что делать, или заказывать автоэвакуатор, а потом в любом случае оплатить работу автоэлектрика.

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

Здравствуйте коллеги!
С совсем недавних пор на нашем портале edcommunity заработал новый сервис. По мне так очень полезный и, главное, очень удобный. Теперь каждый авторизованный пользователь, который проявляет активность на портале и искренне от всей души делится своими наработками и опытом в использовании средств ИКТ на портале, имеет возможность самостоятельно сформировать и скачать официальный сертификат портала сайт!
Как это выглядит на практике?
В первую очередь придя на страницы портала необходимо (войти под своим логином и паролем или сервисом социальной сети).После авторизации следует пройти по ссылке на страницу вашего профиля на портале. Страница будет выглядеть примерно так:
Обращаю ваше внимание на правый верхний угол страницы, где мне напоминают о том, что мой сертификат готов. Смело можем нажимать на изображение самого сертификата. Вы перейдете по ссылке. которая приведет вас на :

Следуя простым указаниям, предлагается заполнить небольшую форму - внимательно читайте указания. В моем случае все выглядело так:

В первом элементе формы - выпадающем списке - выбираем урок, на который вы хотите сформировать Сертификат.
ФИО - укажите ваши фамилию, имя, отчество в дательном падеже.
Должность - тут все вполне понятно.
Ну и, конечно, укажите наименование вашей ОО (образовательной организации).
Осталось нажать на кнопку Сформировать и затем нажать на кнопку (и) Скачать и Распечатать в зависимости от ваших потребностей.