SEO в Битриксе

26.01.2015
Работа с шаблонами
use Bitrix\Iblock\InheritedProperty; 
//ООП  ElementTemplates или SectionTemplates или IblockTemplates )) 
$ipropTemplates = new InheritedProperty\ElementTemplates($IBLOCK_ID, $ELEMENT_ID);
//Установить шаблон для элемента 
$ipropTemplates->set(array(
         "MY_PROP_CODE" => "{=this.Name}",
         "SOME_CODE" => "", //Удалить шаблон
));
//Получить шаблоны для "редактирования" 
$templates = $ipropTemplates->findTemplates();
//Удалить все собственные шаблоны  элемента 
$ipropTemplates->delete();

//ООП  ElementValues или SectionValues или IblockValues )) 
$ipropValues = new InheritedProperty\ElementValues($IBLOCK_ID, $ELEMENT_ID);
//Получить значения 
$values = $ipropValues->getValues();
echo $values ["MY_PROP_CODE"]; 
//Сбросить кеш 
$ipropValues->clearValues(); 
Генерация по шаблону
use Bitrix\Iblock\Template;
//Подключение модуля инфоблоков.
if (\Bitrix\Main\Loader::includeModule('iblock'))
{
      //Задаём шаблон.
      $template = "Name: {=this.Name}. Code:{=this.code}";
      //Исходные данные будем брать из элемента.
      $entity = new Template\Entity\Element($ELEMENT_ID);
      //Не забываем про безопасность.
      echo \Bitrix\Main\Text\String::htmlEncode(
              //Вычисляем значение по шаблону.
              Template\Engine::process($entity, $template) 
     );
}

Полезные команды для создания бэкапов вручную из консоли

19.01.2015

База данных

Делаем бекап БД
mysqldump -h localhost -u USER -p'PASSWORD' DATABASE > /path/to/file/dump.sql
Создаём бекап и сразу его архивируем
mysqldump -h localhost -u USER -p'PASSWORD' DATABASE | gzip > /path/to/outputfile.sql.gz
Заливаем бекап в базу данных
mysql -h localhost -u USER -p'PASSWORD' DATABASE < /path/to/dump.sql
Заливаем архив бекапа в базу
gunzip < /path/to/outputfile.sql.gz | mysql -h localhost -u USER -pPASSWORD DATABASE
Или через mysql-console
mysql> use database;
mysql> source database.sql
Прямой перенос данных из одной БД в другую
mysqldump -h SERVER1 -u USER1 -p'PASSWORD1' database1 | mysql -h SERVER2 -u USER2 -p'PASSWORD2' database2

Файлы

Создание ZIP-архива директории
zip -r file.zip folder_to_zip
Распаковка ZIP-архива
unzip filenname.zip
Создание tar.gz-архива директории
tar -cvzf filename.tar.gz folder
Распаковка tar.gz
tar -xzf rebol.tar.gz
Прочие полезные bash-кейсы были разобраны в этом видео:

Изменение прав на файлы и папки:
find /home/bitrix/ext_www/site.com/. -type f -print | xargs chmod 644
find /home/bitrix/ext_www/site.com/. -type d -print | xargs chmod 755

Поиск в по содержимому файлов:
egrep -ir --include=*.{php,html,js} "(строка_для_поиска)" . 

Штатные функции отладки в 1С-Битрикс

13.08.2014
Запись отладочной информации в файл:
Bitrix\Main\Diag\Debug::writeToFile(array('ID' => $id, 'fields'=>$fields ),"","/debug.txt");
Bitrix\Main\Diag\Debug::dumpToFile(array('ID' => $id, 'fields'=>$fields ),"","/debug.txt");
Учет времени выполнения кода:
Bitrix\Main\Diag\Debug::startTimeLabel('test');
// some code
Bitrix\Main\Diag\Debug::endTimeLabel('test');
$result = Bitrix\Main\Diag\Debug::getTimeLabels();
var_dump($result);
Получение текущей метки времени:
Bitrix\Main\Diag\Helper::getCurrentMicrotime();
Получение стэка вызова функций.
Bitrix\Main\Diag\Helper::getBackTrace($limit = 0, $options = null);
SQL Tracker
$connection = \Bitrix\Main\Application::getInstance()->getConnectionPool()->getConnection();
$connection->startTracker($reset);
// $reset - флаг перезапуска трэкера
//some code with SQL
//$query = $rs->getTrackerQuery()->getSql();// получаем SQL-запросы в строку
$connection->stopTracker();
print_r($connection->getTracker());// вывод информации из трэкера, если нужно

Отладочная информация при помощи CDebugInfo:
$debug = new CDebugInfo();
$debug->Start();
// код
$debug->Stop();
$arDebug['run_time']   = round($debug->arResult['TIME'], 4);
$arDebug['sql_time']   = round($debug->arResult['QUERY_TIME'], 4);
$arDebug['sql_count']   = $debug->arResult['QUERY_COUNT'];

Полезные модули из Маркетплейса

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

Многосайтовойть на доменах

25.03.2014
Если создаются два сайта на доменах site.com и new.site.com, то для правильного определения сайта Битриксом нужно установить у второго значение сортировки меньшее, чем у первого.
Так пишет техподдержка Битрикса:
У сайта на поддомене поле сортировки должно быть меньше, чем у сайта на домене.
Так написано в учебном курсе:
Чтобы избежать проблем в случае, когда доменные имена различных сайтов частично совпадают, следует использовать индекс сортировки сайтов. Тогда при выборе сайта по доменному имени произойдет сравнение индекса сортировки: будет использован сайт с меньшим значением индекса. Если значение индекса сортировки совпадает, то проверка будет производиться по длине доменного имени.

Работа со свойством инфоблока типа "Дата"

16.02.2014
Обновление свойства "Дата":
$formatBX = CLang::GetDateFormat("FULL", LANG);
$formatPHP = $DB->DateFormatToPHP($formatBX);
CIBlockElement::SetPropertyValueCode($elementID, "DATE", date($formatPHP));
Для обновления поля "Дата начала активности" используется такой же формат.
Фильтр по свойству "Дата":
$filter = array(">=PROPERTY_DATE"=>date("Y-m-d H:i:s",time()-3600*3)));

Класс CTextParser для работы с текстом

13.12.2013
Преобразование BBCode в HTML
$obParser = new CTextParser;
$html = $obParser->convertText($bbcodeText);
Обрезание HTML/text до указанной длины с корректным закрытием тегов
$obParser = new CTextParser;
$textLength = 100;
$smallText = $obParser->html_cut($bigText, $textLength);
Класс CTextParser входит в модуль main, поэтому никаких модулей предварительно подключать не нужно.
Записи 11 - 20 из 34
Начало | Пред. | 1 2 3 4 | След. | Конец