вторник, 12 ноября 2013 г.

Битрикс. Зависимые по содержанию блоки.

Допустим, нам надо сделать блок в шаблоне сайта с содержанием, зависимым от того, где мы сейчас находимся и что показываем. Сформулируем более чёткие требования:
  1. На детальной странице новости мы показываем в требуемом блоке пару новостей из этого же раздела и с хотя бы с одним совпадением тегов из показываемой новости.
  2. Если совпадений нет, то просто показываем новости из того же раздела. Показываем новости из этого же раздела на странице списка новостей раздела.
  3. Если и сейчас не хватает - показываем любые из ИБ Новости.
  4. Не забыть про кеширование.
Кстати, сортировка рандомная.

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

четверг, 31 октября 2013 г.

Битрикс. Фильтрация нецензурных слов при добавлении элемента ИБ.

Я как настоящий ленивый программист люблю готовые решения =) Битрикс часто мне их предоставляет, и не надо городить свои велосипеды с пятью квадратными колёсиками.
Итак, стоит задача при добавлении элемента инфоблока проверять содержимое поля DETAIL_TEXT на наличие нецензурных слов и заменять их звёздочками.
В принципе, это стандартная функциональность модуля Форум. Её и будем использовать.

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

1. В init.php на событие OnBeforeIBlockElementAdd вешаем функцию обработчик.
2. Подключаем модуль форум CModule::IncludeModule('forum')
3. Проверяем нужные поля методом CFilterUnquotableWords::Filter($arFields['DETAIL_TEXT']) Он возвращает уже отцензуренный текст, где слова, подходящие под его фильтры, заменены на звёздочку *.

четверг, 24 октября 2013 г.

Стиль кодинга. Что меня может вымораживать =)

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

  1. Самое наверное затасканное. Фигурная скобка на той же строке, что и название функции/оператора. Это сильное имхо, но скобка должна быть на следующей строке. Возражения принимаются при личной встрече. Я объясню свой взгляд на эстетическое построение кода.
  2. При создании массива первая буква - большая. Для меня надо array(), а не Array(). В этом смысле код битрикса меня иногда просто пришибает на месте.
  3. Аналогично в битриксе меня вымораживает повсеместное использование альтернативного синтаксиса типа if endif. Наследие предков...
  4. Неотформатированный красиво код. Он же нечитабелен потом! Да и форматировать надо ОТСТУПАМИ, а не пробелами! У нас файл конфига в одном из проектов отформатирован пробелами. Убила бы, чесслово...
  5. Названия классов с маленькой буквы. Простите, но это уже просто неуважение. Всё равно что имя человека написать с маленькой буквы.
  6. Использование echo  в короткой записи. <? echo $ar; ?>. Если используете короткую запись - так используйте короткую! <?=$ar?>
  7. Использование фигурных скобок в однострочных условиях/циклах. В однострочных они неообязательны. Например
    foreach($ar as $key=>$value)
    {
      echo $value.' ';
    }
    Ну и нафига здесь фигурные скобки? Они только засоряют внешне код. Мне возражают, что мол программист если надо добавить ещё строку к циклу может просто подписать её под строкой, не заметив, что цикл однострочный, ибо фигурных скобок нет. Если код чётко отформатирован, то такого никогда не случится, поверьте мне.
  8. Неоткомментированный код. Простите, а вы сами читали, что у вас написано? =) А если через полгодика? А если ваш коллега успел добавить что-нибудь своё?
  9. Стопиццот вложений. Иф внутри ифа внутри цикла внутри ифа внутри ифа. Ну вы поняли. Вообще больше 4-5 уже считается плохим тоном и говнокодом. Да и просто - такой код относительно нечитабелен. Используйте return, continue и break =)
  10. Использование некорректных префиксов. Если уж написали $arResult, то будьте добры использовать эту переменую как массив, а не как булев переключатель. (В пункте номер 6 ничего не заметили?)

среда, 23 октября 2013 г.

DateTime. Интервал между датами.


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

Читаем документацию по классу DateTime. Его конструктор вполне радостно воспримет стандартный битриксовый формат типа 26.02.2013 12:34:02, поэтому спокойно подаём его на вход при создании объекта. Метод diff возвращает объект класса DataInterval.
//текущая датавремя
$current_date = new DateTime();
//датавремя с которым надо вычислить интервал
$date = new DateTime('26.02.2013 12:34:02');
//интервал разницы между текущим и нужным датавременем
$interval = $current_date->diff($date);

Давайте заглянем внутрь объекта $interval.
DateInterval Object
(
    [y] => 0      //сколько лет
    [m] => 7      //месяцев
    [d] => 25     //дней
    [h] => 5      //часов
    [i] => 7      //минут
    [s] => 5      //секунд
    [invert] => 1 //дата в прошлом (минусовая)
    [days] => 239 //всего дней в интервале
)

Вот и всё, никаких тонн кода. Пусть PHP сам старается. Кстати, далее объект $interval можно использовать либо в своём велосипеде, либо отформатировать методом format.

вторник, 15 октября 2013 г.

Вызов закачки по клику на ссылке

Пришёл мне тут дизайн интересный. От пользователя требуется заполнение формы договора и upload картинок с паспорта и договора. Смотрите сами:
Для чего это надо - неважно, тут серьёзный сайт с серьёзными намерениями. Однако, посмотрите ещё раз на картинку. Ничего не замечаете? Upload сделан ссылками, а download - кнопкой! Это видимо новое слово в дизайне =)

вторник, 24 сентября 2013 г.

Битрикс. Принадлежность пользователя к группе.

Часто требуется проверить принадлежность пользователя к определённой группе. Первой мыслью проскакивает следующий алгоритм
1. проверяем если пользователь авторизован
2. получаем группы для него
3. проверяем in_array нужной группы в массиве групп, полученных на втором шаге.
То есть, грубо говоря, вот так
if ($USER->IsAuthorized())
{
 $arGroups = CUser::GetUserGroup($USER->GetID());
 if (in_array(USERGROUP_MODER, $arGroups ))
 {
  //ставим нужные разрешения
 }
}

Однако, в этих же целях бывает удобнее использовать CSite::InGroup(array $groups). В лучших традициях Битрикса эта функция хоть и присутствует в документации, но описанием там и не пахнет =)
Допустим, нам нужно разрешение на правку, если юзверь является Модератором или Админом.
if (CSite::InGroup(array(USERGROUP_MODER, USERGROUP_ADMIN)))
{
 //ставим нужные разрешения
}

Заметим, что логика в обработке массива групп - ИЛИ.

среда, 28 августа 2013 г.

Битрикс. Курсы junior. Впечатления.

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

четверг, 15 августа 2013 г.

Битрикс. Класс CEventLog: что мы про него знаем.

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

понедельник, 29 июля 2013 г.

Битрикс. Начинающий и продолжающий разработчик. Мой путь.


Да чего уж там. Иногда приходится менять работу. Ищем мы всегда более комфортное или более оплачиваемое место.
Для меня поводом сменить работу стала невозможность более терпеть одинокое и бесправное существование фрилансера.
Городок у нас тут небольшой, однако как-то внезапно появился выбор аж нескольких мест для работы! Для меня, не избалованного вниманием похапешника-нативщика данное обстоятельство было пугающим и несколько обескураживающим. Взвесив все "за" и "против" (наибольший вес для меня имело душевное спокойствие) выбрала стезю Битрикс-разработчика.

вторник, 2 июля 2013 г.

Битрикс. Кастомизация шаблона страничной навигации.

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

Сегодня коротенький разговор о том, откуда взять шаблон для кастомизации страничной навигации.

четверг, 27 июня 2013 г.

Битрикс. Отображаем список наших магазинов с помощью компоненты Яндекс.Карты

Задача: есть список дилерских магазинов определённого вендора. Координаты каждого магазина известны. Надо отобразить эти магазины на карте с помощью компоненты Яндекс.Карты.
В общем, сделать красиво, а не просто список городов и магазинов в них.

Сегодня учимся использовать Яндекс.Карты, добавлять на неё несколько меток, а также понимаем, что Битрикс ещё не идеален =)

четверг, 23 мая 2013 г.

Битрикс. Добавляем файлы в поле со свойством Множественное.

Быстренько о пугающем. Вернее, оно пугает ровно до тех пор, пока не понял, как это сделать. Дальше - проще некуда. Для элемента ИБ создаём свойство типа Файл и ставим на этом свойстве галочку Множественное. Тут и вопрос сразу назрел, а как туда добавить сразу несколько файлов?

Сегодня - быстрый разговор о добавлении файлов в поле типа Файл с включенным свойством Множественное.

среда, 22 мая 2013 г.

Fine Uploader. Асинхронно подкачиваем файлы и добавляем к элементам ИБ.

Мы тут вроде вступили недавно в 21 век. А файлы закачиваем всё также - инпутом с типом файл. Долго, не круто и вообще... 21 век же! Всякие гуглы и мейлы уже давно сделали асинхронную закачку файлов. И пока вы заполняете остальную форму - файлы спокойненько себе подкачиваются.

В интернетах гуляет множество решений, некоторые из которых мне совсем не по душе. Например с флеш-компонентами. Такое сразу отсекаем.
После некоторого времени, потраченного на поиски, выбираю решение fine-uploader. Проект более чем живой, обновляется и развивается. Хранится весь на ГитХабе, хотя и свой сайтец у проекта существует. Все ссылки в конце статьи.

UPD: Статья маленько устарела, если честно. Обращайте внимание на версию =)

Сегодня обсуждаем асинхронную подкачку файлов, решение fine-uploader и традиционно - применение к системе Битрикс: прикрепление нескольких асинхронно закаченных файлов к элементу ИБ. Разговор будет долгий и мозгодробительный, так что готовьтесь.

вторник, 19 марта 2013 г.

Ослизмы. IE, jquery ajax и Invalid argument

Осваивая джаваскрипт, особенно начиная вникать в то КАК оно всё работает и дышит, часто натыкаешься на такие особенности, которых просто не ожидаешь. Проблема браузера это или же проблема надостаточной информативности jquery при выводе ошибок, но обходятся такие особенности только после продолжительного гугления и научного тыкания в небо. Сегодня речь пойдёт об ослике и ajax от jquery.

понедельник, 11 марта 2013 г.

Fzaninotto Faker. Тестовые данные на любой вкус.

Сегодня будем подробнее говорить о фейкере от фзанинотто. Библиотека попалась, когда возникла задача формирования разнообразных тестовых данных - от фейковых пользователей до заполнения ИБ каталога. Фактически, это будет некий художественный перевод документации, ориентированный на русскоязычного пользователя.
Либа требует минимум PHP 5.3.3.

четверг, 28 февраля 2013 г.

Битрикс. Создаём тестовых пользователей.

На определённых этапах разработки частенько встаёт задача добавления тестовых пользователей. Штук хотя бы сто, тыщща, подставьте_своё_значение.
Ручками это делать более чем утомительно. Но мы же программисты, мы любим автоматизировать. К тому же нам далее возможность добавления тестовых данных очень даже пригодится.
Сегодня общаемся о библиотеке фейковых данных и о добавлении тестовых юзверей с аватарками.