FAQ

FTP/SSH (0)

Установка и настройка 1С-Битрикс

  • Опция: "Закрыть публичную часть сайта". Изменение приветственной страницы.
  • Как отключить определение языка пользователя
  • Как убрать из URL страницы знак вопроса?
  • Как вставить flash-баннер?
  • Как воспользоваться фильтром для свойства типа "Список"?
  • 2048 пробелов в начале страницы возможно мешают работе поисковиков
  • Как перенести сайт с локального компьютера на хостинг или с одного хостинга на другой?
  • Настройка 404 ошибки
  • Как изменить шаблон постраничного показа?
  • Как сконвертировать таблицы моего сайта из MyISAM в InnoDB?
  • Как разбить постранично большой текст?
  • Рекомендации по оптимизации сайта для поисковых систем
  • Как убрать "PHPSESSID=..." из URL?
  • Как при показе flash-баннера использовать альтернативную картинку?
  • Как запустить продукт в режиме safe mode?
  • Как удалить включаемые области из демонстрационного шаблона?
  • Как восстановить пароль администратора?
  • Как изменить выставляемые продуктом права на файлы?
  • Как изменить стандартную форму авторизации (регистрации)?
  • Тормозит сайт. Как ускорить работу сайта?
  • Почему нельзя изменять содержимое папки bitrix/modules
  • Какие права на файлы необходимы для работы "Битрикс: Управление сайтом"?
  • Как настроить работу периодических функций с использованием планировщика cron?
  • Как настроить ЧПУ без использования числовых идентификаторов (ID)?
  • Какая структура таблиц БД "Битрикса"? Как мне писать свои SQL запросы?
  • У меня есть домен site.ru. Как в "Битриксе" настроить поддомены вида forum.site.ru?
  • Как использовать параметры PARAM1 и PARAM2 в модуле поиска?
  • Как кастомизировать стандартный компонент?
  • Как закрыть публичную часть сайта только для определённой группы пользователей?
  • Как добавить новые данные в текст письма-уведомления, используя функцию Send?
  • Заказчику не приходит уведомление о новом заказе, почему?
  • Почему цена товара в корзине отличается от цены товара в каталоге?

  • Опция: "Закрыть публичную часть сайта". Изменение приветственной страницы.
    Чтобы изменить вид этой страницы, необходимо создать файл с именем "/bitrix/php_interface/include/site_closed.php" для всех языков или для конкретного языка с именем "/bitrix/php_interface/"код языка"/site_closed.php". Можно ли изменить приветственную страницу, которая показывается посетителям сайта в случае закрытия публичной части с помощью опции "Временное закрытие публичной части сайта"?

    Ответ


    Чтобы изменить вид этой страницы, необходимо создать файл с именем "/bitrix/php_interface/include/site_closed.php" для всех языков или для конкретного языка с именем "/bitrix/php_interface/"код языка"/site_closed.php".

    В этом файле можно разместить любое новое содержимое страницы с информацией о временном закрытии сайта (например, форма авторизации в дизайне сайта и т.п.).

    Как отключить определение языка пользователя
    1. определить русский язык в настройках сайта, как язык по умолчанию.
    2. скопировать содержимое каталога "/" с поддиректориями в корень сайта
    3. определить папку русского языка, как папку корня, "/"
    Как в отключить определение языка пользователя?
    Я не хочу, что бы система сама выбирала, какую языковую версию показывать пользователю. Если по умолчанию указан русский язык, пусть и открывается русский.


    Ответ


    В версии поставки системы в файле /index.php помещен скрипт, определяющий язык пользователя и производящий включение соответствующего файла: /<LANG_DIR>/index.php

    Самым логичным решением для вас является:
    1. определить русский язык в настройках сайта, как язык по умолчанию.
    2. скопировать содержимое каталога "/" с поддиректориями в корень сайта
    3. определить папку русского языка, как папку корня, "/"


    Как убрать из URL страницы знак вопроса?
    Да, для этого необходимо выполнить следующие шаги:

    1. создать в каталоге /news/ файл .htaccess со следующим содержимым:
       
    ErrorDocument 404 /news/404.php
    Как изменить вид URL страницы, например, просмотра элемента инфоблока c /news/detail.php?ID=XXX на /news/XXX.php:

    Ответ


    Да, для этого необходимо выполнить следующие шаги:

    1. создать в каталоге /news/ файл .htaccess со следующим содержимым:
       
    ErrorDocument 404 /news/404.php


    2. Создать в каталоге /news/ файл 404.php со следующим содержимым:

       
    <?
    $arrPath = pathinfo($_SERVER["REQUEST_URI"]);
    function initialize_params($url)
    {
        if (strpos($url,"?")>0)
        {
            $par = substr($url,strpos($url,"?")+1,strlen($url));
            $arr = explode("#",$par);
            $par = $arr[0];
            $arr1 = explode("&",$par);
            foreach ($arr1 as $pair)
            {
                $arr2 = explode("=",$pair);
                global $$arr2[0];
                $$arr2[0] = $arr2[1];
            }
        }
    }

    initialize_params($_SERVER["REQUEST_URI"]);
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
    $arr = explode("?",$arrPath["basename"]);
    $fname = $arr[0];
    if (strlen(trim($arrPath["extension"]))>0)
    {
        $arr = explode(".",$fname);
        $NEWS_ID = intval($arr[0]);
        if ($NEWS_ID>0)
        {
            $ID = $NEWS_ID;
            $APPLICATION->SetTitle("News Details");
            $sapi = php_sapi_name();
            if ($sapi=="cgi") header("Status: 200 OK"); else header("HTTP/1.1 200 OK");
            require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/iblock.php");
            CIblock::ShowPanel($IBLOCK_ID, $ID);
            include($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/news/news_detail.php"); // интерфейсный скрипт, который вызывается и в /news/detail.php
        }
    }
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog.php");
    ?>


    Как вставить flash-баннер?
    1. Создается новый слой, который помещается поверх остальных.
    2. В него помещается прямоугольник, размерами и расположением закрывающий весь баннер.
    3. Прямоугольник преобразуется в символ (Convert to Symbol, Behavior: Button).
    4. Символ делается прозрачным (Properties, Color: Alpha = 0%).
    5. Записывается ссылка на клик по символу (Actions, getURL).
    6. В функции getURL необходимо вместо значений указать параметры link и target,
    Как использовать Flash-баннеры (в качестве рекламных баннеров), чтобы они также периодически менялись при каждом входе на сайт?

    Ответ

    Ротация Flash баннеров производится аналогично как и графических. Только вместо картинки указывается HTML код. Необходимо выполнить следующие шаги:

    Ссылка для ролика создается в программе Macromedia Flash след. образом:

    1. Создается новый слой, который помещается поверх остальных.
    2. В него помещается прямоугольник, размерами и расположением закрывающий весь баннер.
    3. Прямоугольник преобразуется в символ (Convert to Symbol, Behavior: Button).
    4. Символ делается прозрачным (Properties, Color: Alpha = 0%).
    5. Записывается ссылка на клик по символу (Actions, getURL).
    6. В функции getURL необходимо вместо значений указать параметры link и target,

    в результате получится:

    on (release) {
        getURL(link, target);
    }

    См. скриншот как это выглядит в Macromedia Flash.

    В приложении к ответу:
    - пример ролика в формате fla
    - готовый ролик в формате swf
    - скриншот из Flash.

    Баннер загружается средствами продукта аналогично обычному графическому файлу в поле "Изображение:".

    Ссылка указывается стандартно как и для графического баннера.
    Аналогично указывается окно, в котором открывается ссылка.



    Как воспользоваться фильтром для свойства типа "Список"?
    Используйте следующую конструкцию:
    1. Получите ID нужного Вам значения списка.
    2. Используйте это значение в фильтре
    array("PROPERTY"=>array("isMain"=>$EnumID))
    Как воспользоваться фильтром на свойство типа "список"?
    Предположим, у меня есть свойство с кодом "isMain", значениями которого являются "Yes" и "No". Как мне выбрать элементы, у которых значение свойства - "Yes"?
    Фильтр
       
    array("PROPERTY"=>array("isMain"=>"Yes"))

    не работает.


    Ответ

    Используйте следующую конструкцию:

    1. Получите ID нужного Вам значения списка.
       
    $enum_list = CIBlockPropertyEnum::GetList(Array("SORT"=>"ASC", "NAME"=>"ASC"), Array("IBLOCK_ID"=>$BID, "CODE"=>"isMain", "VALUE"=>"Yes"));
    $arEnumIsMain = $enum_list->GetNext();
    $EnumID = $arEnumIsMain ["ID"];


    2. Используйте это значение в фильтре:
       
    array("PROPERTY"=>array("isMain"=>$EnumID))



    2048 пробелов в начале страницы возможно мешают работе поисковиков
    Все дело в ошибке Internet Explorer при обработке компрессированных страниц - иногда, при использовании компрессии на сайте, браузер отрезает первые 2048 символов. В начале каждой сгенерированной продуктом HTML страницы сайта имеется 2048 пробелов до начала самого HTML кода, возможно создающих проблемы для поисковых систем.

    Ответ

    Все дело в ошибке Internet Explorer при обработке компрессированных страниц - иногда, при использовании компрессии на сайте, браузер отрезает первые 2048 символов.

    Этот блок 2048 символов введен для того, чтобы скорректировать ошибку в работе IE 6 с компрессированным контентом, этим исключается обрезание настоящего контента.
    При использовании модуля компрессии этот блок передается всего 2-мя символами.

    Поисковики запрашивают некомпрессированный контент и он отдается им без этих 2048 символов, поэтому на результаты индексирования этот блок не влияет.



    Как перенести сайт с локального компьютера на хостинг или с одного хостинга на другой?
    Возможны разные варинты:
    1. Использование системы резервирования "Битрикс"
    2. Использование штатных средств системы и специальных скриптов
    3. Использование штатных средств системы семейства UNIX
    1. Использование системы резервирования "Битрикс"
    • убедитесь, что удаленный хостинг соответствует минимальным техническим требованиям продукта (для демо версии требуется Zend Optimizer 2.6 и выше)
    • в административном интерфейсе выберите: Настройки - Инструменты - Резервное копирование
    • включите "архивирование по шагам", выберите нужный режим и создайте архив сайта
    • закачайте полученный архив на хостинг и установите на него права на чтение, запись и выполнение для всех (0777)
    • закачайте на хостинг скрипт восстановления (ссылка не него расположена примечании на странице резервирования)
    • откройте в броузере http://<СВОЙ САЙТ>/restore.php и следуйте указаниям скрипта (здесь: <СВОЙ САЙТ> - адрес вашего сайта)
    • укажите в файле bitrix/php_interface/dbconn.php данные для подключения к БД на хостинге

    2. Использование штатных средств системы и специальных скриптов
    • убедитесь, что удаленный хостинг соответствует минимальным техническим требованиям продукта (для демо версии требуется Zend Optimizer 2.6 и выше)
    • загрузите все скрипты сайта по FTP на хостинг и установите на них права на чтение, запись и выполнение для всех (0777)
        Чтобы этот процесс ускорить можете сделать следующее:
      • скачайте скрипт http://www.bitrixsoft.ru/examples/mkinst.php и положите его в корень вашего сайта.
      • перенесите из папки, где располагается ваш локальный сайт, все файлы, размер которых превышает лимит памяти установленный для PHP у хостера. Как правило этот лимит не менее 8М, поэтому прежде чем упаковывать сайт файлы размером более 8М (к примеру файл дампа базы) перенесите в другое место. В стандартном дистрибутиве таких файлов нет.
      • в браузере запустите http://ваш_локальный_сайт/mkinst.php
      • загрузите полученный архив - install.gz по FTP в корень вашего сайта у хостинг провайдера.
      • скачайте скрипт http://www.bitrixsoft.ru/examples/install.php
      • загрузите этот скрипт в корень вашего сайта у хостинг провайдера.
      • в браузере запустите http://ваш_дальний_сайт/install.php
      • обязательно удалите скрипты mkinst.php и install.php с удаленного хостинга. Помимо этого не забудьте в обязательном порядке либо удалить, либо перенести из корня сайта на уровень выше, архив install.gz.
    • создаете дамп базы. Дамп можно создать, например, при помощи приложения phpMyAdmin или стандартной утилитой MySQL:
      mysqldump.exe --add-drop-table -p <ИМЯ_ВАШЕЙ_ЛОКАЛЬНОЙ_БАЗЫ> > bitrix.dmp
      Если такой запуск не отработает посмотрите параметры запуска данной утилиты:
      mysqldump.exe --?
    • для управления БД обычно на хостингах имеется phpMyAdmin. Если нет - скопируете файл bitrix.dmp по FTP на ваш дальний хостинг, затем подключитесь к удалённому серверу через SSH. Там выполните команду: mysql -u <ИМЯ ПОЛЬЗОВАТЕЛЯ> -p <ПАРОЛЬ> <ИМЯ БД> < bitrix.dmp
    • укажите в файле bitrix/php_interface/dbconn.php данные для подключения к БД на хостинге

    3. Использование штатных средств системы семейства UNIX
    • убедитесь, что удаленный хостинг соответствует минимальным техническим требованиям продукта (для демо версии требуется Zend Optimizer 2.6 и выше)
    • подключитесь к удалённому хостингу используя SSH клиент и перейдите в корень сайта командой cd <путь к корню сайта>
    • создайте дамп базы данных используя утилиту MySQL: mysqldump -h<DBHost> -u<DBLogin> -p<DBPassword> <DBName> > mysql_data.sql (значения DBHost, DBLogin, DBPassword, DBName соответствуют данным файла bitrix/php_interface/dbconn.php)
    • создайте архив данных используя утилиту tar: tar czf site.tgz . (обязательно наличие точки, которая указывает на текущий каталог)
    • используя ftp клиент закачайте файл site.tgz в корень сайта на новом хостинге и распакуйте используя SSH: tar xzf site.tgz
    • загрузите данные в базу данных: mysql -h<DBHost> -u<DBLogin> -p<DBPassword> <DBName> < mysql_data.sql (значения DBHost, DBLogin, DBPassword, DBName уточните у хостера)

    * Примечание: при использовании консольных утилит mysql и mysqldump чтобы избежать проблем с кодировками удобно использовать дополнительный параметр, который жёстко определяет кодировку: --default-character-set=cp1251


    Настройка 404 ошибки
    Если у вас PHP установлен как CGI добавьте в корне сайта в файл .htaccess следующие строки:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^[0-9a-zA-Z_/.-]+.php$ /404.php
    ErrorDocument 404 /404.php
    Каким образом настроить корректную обработку 404 ошибки под Apache?

    Ответ

    Если у вас PHP установлен как CGI добавьте в корне сайта в файл .htaccess следующие строки:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^[0-9a-zA-Z_/.-]+.php$ /404.php
    ErrorDocument 404 /404.php

    Для PHP установленном как ISAPI в .htaccess достаточно добавить строку:
      
    ErrorDocument 404 /404.php

    После этого создайте в корне сайта файл 404.php (если его нет), который и будет являться обработчиком 404 ошибки.



    Как изменить шаблон постраничного показа?
    Для постраничного показа можно использовать следующие параметры для изменения внешнего вида:
    NavPrint($Title, $Show_allways=false, $StyleText="text", $Template_path)
    $Title - заголовок (название записи);
    $Show_allways - если не установлен (false), то функция не будет выводить навигационные ссылки если все записи умещаются в одну страницу. Если true, то ссылки для постраничной навигации будут выводиться всегда. Необязательный, по умолчанию false;
    $StyleText - стиль шрифта;
    $Template_path - путь шаблону показа.
    Для постраничного показа можно использовать следующие параметры для изменения внешнего вида:
    NavPrint($Title, $Show_allways=false, $StyleText="text", $Template_path)
    $Title - заголовок (название записи);
    $Show_allways - если не установлен (false), то функция не будет выводить навигационные ссылки если все записи умещаются в одну страницу. Если true, то ссылки для постраничной навигации будут выводиться всегда. Необязательный, по умолчанию false;
    $StyleText - стиль шрифта;
    $Template_path - путь шаблону показа.

    Шаблон показа постраничной навигации формируется по умолчанию следующим образом (можно вынести в отдельный файл, скорректировать и указать путь к шаблону в вызове функции):
       
    <?
    echo('<font class="'.$StyleText.'">'.$title.' ');
    echo(($this->NavPageNomer-1)*$this->NavPageSize+1);
    echo(' - ');
    if($this->NavPageNomer != $this->NavPageCount)
        echo($this->NavPageNomer * $this->NavPageSize);
    else
        echo($this->NavRecordCount);
    echo(' '.GetMessage("nav_of").' ');
    echo($this->NavRecordCount);
    echo("n<br>n</font>");

    echo('<font class="'.$StyleText.'">');

    if($this->NavPageNomer > 1)
        echo('<a href="'.$sUrlPath.'?PAGEN_'.$this->NavNum.'=1'.$strNavQueryString.'#na
    v_start'.$add_anchor.'">'.$sBegin.'</a> | <a
    href="'.$sUrlPath.'?PAGEN_'.$this->NavNum.'='.($this->NavPageNomer-1).
    $strNavQueryString.'#nav_start'.$add_anchor.'">'.$sPrev.'</a>');
    else
        echo($sBegin.' | '.$sPrev);

    echo(' | ');

    $NavRecordGroup = $nStartPage;
    while($NavRecordGroup <= $nEndPage)
    {
        if($NavRecordGroup == $this->NavPageNomer)
            echo(''.$NavRecordGroup.' ');
        else
            echo('<a href="'.$sUrlPath.'?PAGEN_'.$this->NavNum.'='.$NavRecordGroup.$strNavQ
    ueryString.'#nav_start'.$add_anchor.'">'.$NavRecordGroup.'</a> ') ;
        $NavRecordGroup++;
    }

    echo('| ');
    if($this->NavPageNomer < $this->NavPageCount)
        echo ('<a href="'.$sUrlPath.'?PAGEN_'.$this->NavNum.'='.($this->NavPageNomer+1).
    $strNavQueryString.'#nav_start'.$add_anchor.'">'.$sNext.'</a> |&n bsp;<a
    href="'.$sUrlPath.'?PAGEN_'.$this->NavNum.'='.$this->NavPageCount.$str
    NavQueryString.'#nav_start'.$add_anchor.'">'.$sEnd.'</a> ');
    else
        echo ($sNext.' | '.$sEnd.' ');

    //"All" section is being show with the code below

    if($this->bShowAll)
        echo ($this->NavShowAll? '| <a href="'.$sUrlPath.'?SHOWALL_'.$this->NavNum.'=0'.$strNavQueryString.'#
    nav_start'.$add_anchor.'">'.$sPaged.'</a> ' : '| <a
    href="'.$sUrlPath.'?SHOWALL_'.$this->NavNum.'=1'.$strNavQueryString.'# nav_start'.$add_anchor.'">'.$sAll.'</a> ');

    echo('</font>');
    ?>


    Как сконвертировать таблицы моего сайта из MyISAM в InnoDB?
    Для конвертации всех таблиц "Битрикс" с MyISAM на InnoDB возможны варианты:
    1. Если база данных имеет небольшой объём
    2. Для больших объёмов данных
    Для конвертации всех таблиц "Битрикс" с MyISAM на InnoDB возможны варианты:

    1. Если база данных имеет небольшой объём

    Выполните следующий скрипт через браузер:
       
    <?
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    $res=$DB->Query("SHOW TABLES LIKE 'b_%'");
    while ($f=$res->Fetch()) {
            $v=each($f);
            $Query = "ALTER TABLE ".$v[1].", type=InnoDB";
            if ($DB->Query($Query,true))
                    echo $v[1]." <font color=green>OK</font>";
            else
                    echo $v[1]." <font color=red>Ошибка!</font>";
    }
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
    ?>

    2. Для больших объёмов данных

      Выполните следующий скрипт через браузер:
       
    <?
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    if ($file=fopen($_SERVER["DOCUMENT_ROOT"]."/myisam_to_innodb.sql","wb")) {
    $res=$DB->Query("SHOW TABLES LIKE 'b_%'");
    while ($f=$res->Fetch()) {
            $v=each($f);
            $Query = "ALTER TABLE ".$v[1].", type=InnoDB;\n";
            fputs($file,$Query);
    }
    fclose($file);
    } else {
      echo "Ошибка открытия файла на запись";
    }
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
    ?>

    Получившийся файл myisam_to_innodb.sql в корне сайта выполните в консоли mysql:
       
    mysql -u[user] -p[password] -h[host] [database] < myisam_to_innodb.sql

    Заменив [user], [password], [host] и [database] на свои значения.

    Внимание! После конвертации необходимо добавить в bitrix/php_interface/dbconn.php:
       
    define("MYSQL_TABLE_TYPE", "INNODB");


    Как разбить постранично большой текст?
    1. На компонентах 2.0.
    Большинство компонентов 2.0 стандартно поддерживают разбиение текста тегом <BREAK />. Можно вставить соответствующий разделитель в текст, который будет выводиться компонентом 2.0, вручную или в визуальном редакторе.
    2. На компонентах 1.0.
    1. На компонентах 2.0.
    Большинство компонентов 2.0 стандартно поддерживают разбиение текста тегом <BREAK />. Можно вставить соответствующий разделитель в текст, который будет выводиться компонентом 2.0, вручную или в визуальном редакторе.

    2. На компонентах 1.0.
    Пример текста (в качестве разделителя страниц - #BREAK#):

    $TEXT = "test text, text
    #BREAK#
    test text, text
    text, text
    #BREAK#
    test text";


    Скрипт постраничного просмотра одного текста:

    $aPages = explode("#BREAK#", $TEXT);

    $res = new CDBResult;
    $res->InitFromArray($aPages);
    $res->NavStart(1);
    if($res->IsNavPrint())
    {
    echo "<p>";
    $res->NavPrint("Страницы");
    echo "</p>";
    }

    while($page = $res->Fetch())
    echo $page;


    Рекомендации по оптимизации сайта для поисковых систем

    Для оптимизации сайта пользователи могут использовать следующие возможности продукта:

    • Управление метаданными
    • Заголовок окна браузера
    • Стили заголовков страницы ( H 1, H 2, H 3)
    • Исключение CSS кода из кода страницы для поисковых систем
    • Никаких ограничений на внешний вид сайта
    • Понятные пользователю URL
    • Использование метаданных для динамического контента страниц
    • Выясните, по каким поисковым фразам пользователи осуществляют переход на ваш сайт
    • Ограничение активности поисковых роботов
    • Возможность удаления идентификатора PHP сессии из адреса URL страницы
    Оптимизация сайта для поисковых систем является одним из важнейших элементов продвижения сайта в Интернете. Сегодня перед многими владельцами веб-ресурсов остро стоит проблема оптимизации сайта, поскольку основной поток посетителей приходит на сайт именно с поисковиков.

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

    * Какая структура сайта является наиболее подходящей для обработки поисковыми машинами?
    * Каким образом оптимизировать страницы сайта для успешного позиционирования проекта в поисковых системах?
    * С помощью каких средств и инструментов можно добиться успешного решения задачи поисковой оптимизации сайта?

    Продукт «Битрикс: Управление сайтом» обеспечивает владельцев сайта всеми необходимыми инструментами для решения перечисленных выше задач. Чтобы грамотно провести оптимизацию веб-проекта, пользователям «Битрикс: Управление сайтом» не требуется самостоятельно править исходный код страницы или прибегать к услугам технических специалистов.

    Для оптимизации сайта пользователи могут использовать следующие возможности продукта:

    * Управление метаданными - специальные свойства, используемые для того, чтобы задать ключевые слова, описания страниц и разделов сайта. Данные свойства могут быть заданы пользователем с помощью визуального HTML -редактора продукта или обычного текстового редактора.
    * Заголовок окна браузера - с помощью кнопки «Редактировать свойства страницы» (при редактировании страницы в визуальном редакторе) можно создать заголовок, который будет отображаться в окне браузера. Для каждой страницы сайта может быть создан свой заголовок окна браузера. Кроме того, заголовок окна браузера может зависеть от заголовка, расположенного в теле страницы, а также динамической информации, просматриваемой на странице. Например, в заголовке окна браузера может выводиться название просматриваемой новости, раздела каталога товара или самого товара и т.д.
    * Стили заголовков страницы ( H 1, H 2, H 3) - управление стилями заголовков страницы осуществляется в режиме редактирования страницы в HTML -редакторе.
    * Исключение CSS кода из кода страницы для поисковых систем - таблица Каскадных Стилей может быть включена непосредственно в код страницы, либо подключена из внешнего файла, в зависимости от того, просматривается ли страница пользователем, либо запрошена поисковым роботом.
    * Никаких ограничений на внешний вид сайта - продукт «Битрикс: Управление сайтом» не накладывает никаких ограничений на внешний вид сайта: шаблон сайта может быть разработан как на основе таблиц, так и с использованием слоев. Таким образом, информационное наполнение страницы может быть помещено ближе к началу файла.
    * Понятные пользователю URL – обычно, при выводе динамической информации в публичной части сайта в URL страницы добавляются специальные параметры (например, ID новостей, товаров и т.д.). Например, mysite.com/news/index.php?ID=23. Стандартные механизмы продукта «Битрикс: Управление сайтом» позволяют преобразовать данные URL в удобный для восприятия пользователями вид (без использования mod_rewrite). Например, mysite.com/news/23.php.
    * Использование метаданных для динамического контента страниц - добавление ключевых слов и описаний для новостей, статей, элементов каталогов товаров и т.д. Специальные свойства элементов информационных блоков могут быть использованы для задания значений метаданных для товаров, новостей, элементов фотогалереи и т.д. Таким образом, любой товар торгового каталога, новость, вакансия, опубликованные на вашем сайте, будут проиндексированы по своим собственным ключевым словам и описаниям.
    * Выясните, по каким поисковым фразам пользователи осуществляют переход на ваш сайт - специальные средства модуля «Статистика» позволяют определить поисковые фразы, по которым пользователи находят ваш сайт в поисковых системах. Полученная информация может быть использована для определения ключевых слов, а так же при оптимизации системы навигации сайта, для облегчения доступа пользователей к интересующим их ресурсам.
    * Ограничение активности поисковых роботов - в случае если некоторые поисковые роботы показывают слишком высокую активность на сайте, они могут быть блокированы с помощью встроенных средств системы на определенный администратором сайта период.
    * Возможность удаления идентификатора PHP сессии из адреса URL страницы - добавление ID сессии в URL страницы мешает индексации сайта поисковыми машинами. Вы можете запретить отображение ID сессии в URL страницы, добавив соответствующую строку в файл конфигурации системы или сервера.


    Как убрать "PHPSESSID=..." из URL?
    Чтобы избавиться от идентификатора сессии в URL, раскомментируйте строку в /.htaccess
       php_flag session.use_trans_sid off
    У всех ссылок на сайте в URL появился параметр "PHPSESSID=...". Как избавиться от него?

    Ответ

    Чтобы избавиться от идентификатора сессии в URL, раскомментируйте строку в /.htaccess
       php_flag session.use_trans_sid off
    Если это не дает результата, необходимо изменить значение параметра session.use_trans_sid на Off непосредственно в php.ini на сервере.
    Удостоверьтесь, также, что значение параметра session.use_cookies установлено в On.



    Как при показе flash-баннера использовать альтернативную картинку?

    1. При публикации Flash баннера из программы Macromedia (ныне Adobe) Flash следует указать альтернативные форматы, которые будут созданы вместе с Flash баннером, например Gif.

    2. На вкладке HTML в диалоге публикации следует установить опцию "Detect Flash Player". В данном случае будет сгенерирован специальный код, содержащий JavaScript для проверки установлен ли Flash проигрыватель и какой он версии.

    Есть ли возможность использовать альтернативную картинку (GIF, JPG, PNG) при показе Falsh баннера для пользователей, у которых не установлен Flash проигрыватель?

    Ответ

    Для того чтобы вставить Flash баннер с подложкой (картинкой GIF, JPG, PNG) необходимо сделать следующее:

    1. При публикации Flash баннера из программы Macromedia (ныне Adobe) Flash следует указать альтернативные форматы, которые будут созданы вместе с Flash баннером, например Gif.

    2. На вкладке HTML в диалоге публикации следует установить опцию "Detect Flash Player". В данном случае будет сгенерирован специальный код, содержащий JavaScript для проверки установлен ли Flash проигрыватель и какой он версии.

    3. Обратите внимание, полученный HTML код следует скопировать в поле "Код баннера" в режиме HTML (визуальный редактор можно отключить).

    4. Код можно сократить оставив только непосредственно вывод баннер средствами JavaScript

       

    <script language="JavaScript" type="text/javascript">
    <!--
    var hasRightVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
    if(hasRightVersion) {  // if we've detected an acceptable version
        var oeTags = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
        + 'width="468" height="60"'
        + 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">'
        + '<param name="movie" value="/images/demo_link.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />'
        + '<embed src="/images/demo_link.swf" quality="high" bgcolor="#ffffff" '
        + 'width="468" height="60" name="demo_link" align="middle"'
        + 'play="true"'
        + 'loop="false"'
        + 'quality="high"'
        + 'allowScriptAccess="sameDomain"'
        + 'type="application/x-shockwave-flash"'
        + 'pluginspage="http://www.macromedia.com/go/getflashplayer">'
        + '</embed>'
        + '</object>';
        document.write(oeTags);   // embed the flash movie
      } else {  // flash is too old or we can't detect the plugin
        var alternateContent = 'Alternate HTML content should be placed here.'
         + 'This content requires the Macromedia Flash Player.'
          + '<a href=http://www.macromedia.com/go/getflash/>Get Flash</a>';
        document.write('<img src="/images/demo_link.gif" width="468" heigh="60" alt="" />');  // insert non-flash content
      }
    // -->
    </script>
    <noscript>
       // Provide alternate content for browsers that do not support scripting
       // or for those that have scripting disabled.
         <img src="/images/demo_link.gif" width="468" heigh="60" alt="" />
    </noscript>

    Код определения версии Flash проигрывателя можно вынести в область в шаблон сайта.

    Ниже приведен пример подобного кода:

       

    <script language="JavaScript" type="text/javascript">
    <!--
    // -----------------------------------------------------------------------------
    // Globals
    // Major version of Flash required
    var requiredMajorVersion = 8;
    // Minor version of Flash required
    var requiredMinorVersion = 0;
    // Revision of Flash required
    var requiredRevision = 0;
    // the version of javascript supported
    var jsVersion = 1.0;
    // -----------------------------------------------------------------------------
    // -->
    </script>
    <script language="VBScript" type="text/vbscript">
    <!-- // Visual basic helper required to detect Flash Player ActiveX control version information
    Function VBGetSwfVer(i)
      on error resume next
      Dim swControl, swVersion
      swVersion = 0
      
      set swControl = CreateObject("ShockwaveFlash.ShockwaveFlash." + CStr(i))
      if (IsObject(swControl)) then
        swVersion = swControl.GetVariable("$version")
      end if
      VBGetSwfVer = swVersion
    End Function
    // -->
    </script>
    <script language="JavaScript1.1" type="text/javascript">
    <!-- // Detect Client Browser type
    var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
    var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
    var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
    jsVersion = 1.1;
    // JavaScript helper required to detect Flash Player PlugIn version information
    function JSGetSwfVer(i){
       // NS/Opera version >= 3 check for Flash plugin in plugin array
       if (navigator.plugins != null && navigator.plugins.length > 0) {
          if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
             var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
                var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
             descArray = flashDescription.split(" ");
             tempArrayMajor = descArray[2].split(".");
             versionMajor = tempArrayMajor[0];
             versionMinor = tempArrayMajor[1];
             if ( descArray[3] != "" ) {
                tempArrayMinor = descArray[3].split("r");
             } else {
                tempArrayMinor = descArray[4].split("r");
             }
                versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
                flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
             } else {
             flashVer = -1;
          }
       }
       // MSN/WebTV 2.6 supports Flash 4
       else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
       // WebTV 2.5 supports Flash 3
       else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
       // older WebTV supports Flash 2
       else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
       // Can't detect in all other cases
       else {
          
          flashVer = -1;
       }
       return flashVer;
    }
    // If called with no parameters this function returns a floating point value
    // which should be the version of the Flash Player or 0.0
    // ex: Flash Player 7r14 returns 7.14
    // If called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
    function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
    {
       reqVer = parseFloat(reqMajorVer + "." + reqRevision);
          // loop backwards through the versions until we find the newest version   
       for (i=25;i>0;i--) {   
          if (isIE && isWin && !isOpera) {
             versionStr = VBGetSwfVer(i);
          } else {
             versionStr = JSGetSwfVer(i);      
          }
          if (versionStr == -1 ) {
             return false;
          } else if (versionStr != 0) {
             if(isIE && isWin && !isOpera) {
                tempArray         = versionStr.split(" ");
                tempString        = tempArray[1];
                versionArray      = tempString .split(",");            
             } else {
                versionArray      = versionStr.split(".");
             }
             versionMajor      = versionArray[0];
             versionMinor      = versionArray[1];
             versionRevision   = versionArray[2];
             
             versionString     = versionMajor + "." + versionRevision;   // 7.0r24 == 7.24
             versionNum        = parseFloat(versionString);
               // is the major.revision >= requested major.revision AND the minor version >= requested minor
             if ( (versionMajor > reqMajorVer) && (versionNum >= reqVer) ) {
                return true;
             } else {
                return ((versionNum >= reqVer && versionMinor >= reqMinorVer) ? true : false );   
             }
          }
       }   
       return (reqVer ? false : 0.0);
    }
    // -->
    </script>

    Файлы баннера и подложки должны быть скопированы в нужное место на сайт.

    В данном случае не нужно загружать их средствами формы редактирования баннера(!).

    Пути к файлам баннера можно скорректировать непосредственно в коде. Обратите внимание, что вызов баннера Flash производится в двух местах: в теге <OBJECT> для объекта ActiveX и в теге <EMBED> для браузеров использующих плагины.

    5. Обратите внимание, так как вставка кода производится в поле "Код баннера", то стандартный учет кликов по Flash баннеру работать не будет.

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



    Как запустить продукт в режиме safe mode?
    Наш продукт спроектирован таким образом, что в режиме safe mode практически очень трудно достижима полноценная работа продукта. В таком режиме "Битрикс" не сможет установится штатно: инсталлятор блокирует установку в safe mode. Если вы перенесёте его с другой машины, он может запуститься, но ряд функций будет недоступен. На нашем хостинге включен safe mode. Что делать?

    Ответ

    Наш продукт спроектирован таким образом, что в режиме safe mode практически очень трудно достижима полноценная работа продукта. В таком режиме "Битрикс" не сможет установится штатно: инсталлятор блокирует установку в safe mode. Если вы перенесёте его с другой машины, он может запуститься, но ряд функций будет недоступен.
    С чем вам придётся столкнуться: в процессе работы нельзя пользоваться ftp либо настроить ftp сервер на работу от имени того же пользователя, что и веб-сервер; ряд функций в safe mode работает не так, как в номальном режиме, а часть не работает вовсе, информацию об этих функциях вы найдёте на сайте php; возможны и другие проблемы.
    Таким образом, запуск в safe mode возможен, но для этого требуются глубокие знания администрирования. Можете делать это на свой страх и риск.
    Мы рекомендуем использовать хостинг, который тестировался на совместимость с продуктом. Список таких компаний-хостеров представлен на странице: http://www.bitrixsoft.ru/sitemanager/hosting.php
    Существует также много других компаний, которые тоже предоставляют услуги хостинга без safe mode.




    Как удалить включаемые области из демонстрационного шаблона?
    В коде шаблона необходимо закомментировать или удалить строку, отвечающую за подключение включаемой области.
    Обычно, это файлы, заканчивающиеса на "_inc.php".
    В коде шаблона необходимо закомментировать или удалить строку, отвечающую за подключение включаемой области.
    Обычно, это файлы, заканчивающиеса на "_inc.php".
    Строка имеет примерно следующий вид:

       <?$APPLICATION->IncludeFile(substr($APPLICATION->GetCurPage(), 0, strlen($APPLICATION->GetCurPage())-4)."_inc.php", Array(), Array("MODE"=>"html", "NAME"=>GetMessage("PAGE_INC"), "TEMPLATE"=>"page_inc.php"));?>


    Как восстановить пароль администратора?
    Вам следует выполнить запрос SQL Я потерял пароль администратора. Что мне делать?

    Ответ

    Вам следует выполнить запрос SQL:    update b_user set password='e10adc3949ba59abbe56e057f20f883e' where login='ваш_логин'
    После этого пароль установится равным "123456".



    Как изменить выставляемые продуктом права на файлы?
    Права, с которыми создаются файлы и папки, вы можете установить в файле /bitrix/php_interface/dbconn.php Права, с которыми создаются файлы и папки, вы можете установить в файле /bitrix/php_interface/dbconn.php:
       
    define("BX_FILE_PERMISSIONS", 0755);
    define("BX_DIR_PERMISSIONS", 0755);


    См. также:
    http://www.1c-bitrix.ru/blog/howto/387.php


    Как изменить стандартную форму авторизации (регистрации)?
    - cоздайте страницу (не требующую авторизации), поместите на нее bitrix:main.register и настройте его;
    - если необходимо - скопируйте шаблон .default компонента bitrix:main.register и модифицируйте его;
    - скопируйте шаблон .default компонента bitrix:system.auth.authorize в шаблон сайта и измените его так, чтобы путь для регистрации указывал на созданную страницу.
    Если используются компоненты 2.0 (см. настройки главного модуля):
    - cоздайте страницу (не требующую авторизации), поместите на нее bitrix:main.register и настройте его;
    - если необходимо - скопируйте шаблон .default компонента bitrix:main.register и модифицируйте его;
    - скопируйте шаблон .default компонента bitrix:system.auth.authorize в шаблон сайта и измените его так, чтобы путь для регистрации указывал на созданную страницу.
    См. http://www.bitrixsoft.ru/help/source/main/help/ru/developer/general/component20/10.template_place.php.html

    Для компонентов 1.0 вам необходимо вынести компонент формы авторизации (регистрации) из /bitrix/modules/main/install/templates/main/auth/authorize.php (registration.php) в текущий шаблон /bitrix/templates/<id_шаблона>/main/auth/ и модифицировать нужным вам образом.


    Тормозит сайт. Как ускорить работу сайта?
    1.собственные компоненты, которые не оптимизированы, имеют логические ошибки.
    2.использование компонентов, выполняющих сложные и объемные выборки данных.
    3.неправильная настройка серверного ПО
    4.недостаточные ресурсы хостинга при достаточно высокой посещаемости
    5.большие объемы страниц сайта, которые при средней скорости каналов клиента долго передаются браузерам
    Наиболее типичные причины торможения:
    1.собственные компоненты, которые не оптимизированы, имеют логические ошибки.
    2.использование компонентов, выполняющих сложные и объемные выборки данных.
    3.неправильная настройка серверного ПО
    4.недостаточные ресурсы хостинга при достаточно высокой посещаемости
    5.большие объемы страниц сайта, которые при средней скорости каналов клиента долго передаются браузерам

    Для кардинального ускорения рекомендуем использовать кеширование
    http://www.1c-bitrix.ru/performance/cache.php

    Также, если у Вас есть модуль компрессии, то используйте его.
    Если нет, то используйте модуль apache "mod_deflate".
    Это позволит сжать страницу перед отправкой посетителю сайта. Меньше размер - быстрее передача страницы.
    http://www.1c-bitrix.ru/performance/compression.php

    Проверьте наличие PHP модуля eAccelerator.
    eAccelerator это свободно-распространяемый PHP акселератор, оптимайзер и средство для кеширования динамического контента.
    Он увеличивает производительность PHP скриптов за счет их кеширования в скомпилированном состоянии, тем самым предотвращая их
    постоянную перекомпиляцию. В результате происходит увеличение скорости их выполнения.
    eAccelerator обычно уменьшает нагрузку на сервер и увеличивает скорость исполнения PHP кода на величину от 1 до 10 раз.
    http://eaccelerator.net/

    Если используются свои компоненты, то оптимизируйте логику их работы, а также используйте кеширование в них
    http://www.1c-bitrix.ru/help/source/main/help/ru/developer/general/technology/cache.php.html

    Очень важным является настройка серверного ПО.
    Если у Вас есть возможность менять настройки этого ПО, то используйте документацию по конфигурированию веб-систем
    http://www.bitrixsoft.ru/download/manuals/ru/sysadmin_recommendations.doc

    Для анализа скорости работы компонентов используйте инструменты
    http://www.1c-bitrix.ru/performance/tools.php

    Если страница с контентом
    <?
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
    ?>

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


    Почему нельзя изменять содержимое папки bitrix/modules
    Содержимое папки bitrix/modules называется ядром продукта (сюда же относятся системные комопненты: bitrix/components/bitrix). Содержимое папки bitrix/modules называется ядром продукта (сюда же относятся системные комопненты: bitrix/components/bitrix). В процессе обновления системы содержимое этой папки может быть переписано. Если вы внесёте свои изменения в ядро, они потеряются при обновлении.
    Вы делаете изменения на свой страх и риск, компания "Битрикс" не несёт ответственности за последствия изменений. Согласно лицензионному соглашению, в этом случае вам будет отказано в технической поддержке со стороны нашей компании.


    Какие права на файлы необходимы для работы "Битрикс: Управление сайтом"?
    Дать однозначный ответ какие должны быть права на файлы нельзя, так как каждый хостинг настроен по особенному.
    В итоге результат должен быть таким: должны быть права на чтение/запись из скрипта, т.е. для пользователя под которым запущен Apache. При этом на разделяемом хостинге другие пользователи на этой же машине не должны иметь права читать/писать в ваши файлы из своих скриптов. Также желательно чтобы пользователь по FTP мог перетирать эти файлы и обратно - файлы, закачанные по FTP, могли быть перезаписаны из скрипта.
    Дать однозначный ответ какие должны быть права на файлы нельзя, так как каждый хостинг настроен по особенному.

    В итоге результат должен быть таким: должны быть права на чтение/запись из скрипта, т.е. для пользователя под которым запущен Apache. При этом на разделяемом хостинге другие пользователи на этой же машине не должны иметь права читать/писать в ваши файлы из своих скриптов. Также желательно чтобы пользователь по FTP мог перетирать эти файлы и обратно - файлы, закачанные по FTP, могли быть перезаписаны из скрипта.

    Проблема в том, что у каждого хостинг-провайдера своя политика безопасности и свои настройки: одни ограничивают доступ к чужим файлам даже при 777, другие запускают процесс Apache под своим пользователем для каждого виртуального хоста, и т.д...

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

    См. также:
    http://www.1c-bitrix.ru/blog/howto/387.php


    Как настроить работу периодических функций с использованием планировщика cron?
    Чтобы запускать скрипты, работающие с API "Битрикс", из командной строки необходимо определить некоторые серверные переменные, отключить статистику и подключить ядро без отображения шаблона сайта Чтобы запускать скрипты, работающие с API "Битрикс", из командной строки необходимо определить некоторые серверные переменные, отключить статистику и подключить ядро без отображения шаблона сайта:
       
    #!/usr/bin/php
    <?php
    $_SERVER["DOCUMENT_ROOT"] = "/home/hosting/www";
    $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
    define("LANG", "ru");

    define("NO_KEEP_STATISTIC", true);
    define("NOT_CHECK_PERMISSIONS", true);

    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules­/main/include/prolog_before.php");
    set_time_limit(0);

    //ваш код...

    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules­/main/include/epilog_after.php");
    ?>


    Здесь вам следует изменить следущие строки:

       #!/usr/bin/php - путь к интерпретатору php - узнайте у хостера;
       $_SERVER["DOCUMENT_ROOT"] - путь к корневой папке сервера;
       define("LANG", "ru"); - язык сайта.

    После этого такому скрипту необходимо дать права на выполнение:
       chmod +x myscript.php

    Убедившись, что скрипт отрабатывает из командной строки, можно добавить задание cron, например:

       0 0 * * * [путь]/myscript.php >> [путь]/myscript.log

    Путь к текущей папку можно узнать командой
       pwd
    Весь вывод скрипта будет дописываться в myscript.log

    Если на хостинге нет интерпретатора php (только модуль php для apache), то сам скрипт будет иметь вид:
       
    <?php
    if ($_SERVER['REMOTE_ADDR']!='127.0.0.1') die(); // Защита от постороннего запуска

    define("NO_KEEP_STATISTIC", true);
    define("NOT_CHECK_PERMISSIONS", true);

    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules­/main/include/prolog_before.php");
    set_time_limit(0);

    //ваш код...

    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules­/main/include/epilog_after.php");
    ?>


    А вызов в планировщике надо будет делать через http клиент (например, lynx):
       0 0 * * * lynx mysite.ru/myscript.php >> [путь]/myscript.log


    Как настроить ЧПУ без использования числовых идентификаторов (ID)?
    Для хранения идентификаторов элементов/разделов информационных блоков удобнее всего использовать поле "Символическое имя". Например, в ссылке www.myserver.ru/catalog/mobile/nokia_3310/
    'mobile' - это символическое имя группы "Мобильные телефоны", а 'nokia_3310' - символическое имя элемента, находящегося в группе "Мобильные телефоны". Проверить уникальность символического имени при добавлении нового элемента инфоблока можно с помощью "обработчика формы добавления"
    Для хранения идентификаторов элементов/разделов информационных блоков удобнее всего использовать поле "Символическое имя". Например, в ссылке www.myserver.ru/catalog/mobile/nokia_3310/
    'mobile' - это символическое имя группы "Мобильные телефоны", а 'nokia_3310' - символическое имя элемента, находящегося в группе "Мобильные телефоны". Проверить уникальность символического имени при добавлении нового элемента инфоблока можно с помощью "обработчика формы добавления"
    (подробнее http://www.bitrixsoft.ru/help/source/iblock/help/ru/developer/custom.php.html)


    В обработчике 404 ошибки необходимо "разобрать" переменную $_SERVER["REQUEST_URI"] на нужные идентификаторы. Для этого в PHP есть ряд полезных функций:
    preg_match (php.net/preg_match)
    parse_url (php.net/parse_url)
    pathinfo (php.net/pathinfo)
    strpos (php.net/strpos)
    parse_str (php.net/parse_str)

    Например, ссылки вида www.myserver.ru/users/<Логин пользователя> (логин пользователя состоит из символов латиницы, цифр, символа '_'; логин должен быть длиной от 3 до 15 символов и не может начинаться с цифры) обрабатываются в файле 404.php так:

       

    <?

    if(preg_match("~^/users/([a-z_][a-z0-9_]{2,14})/?$­~i",$_SERVER["REQUEST_URI"],$match))
    {
       header("HTTP/1.1 200 OK");
       //делаем выборку по идентификатору
       require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.­php");
       $res = CUser::GetList($O, $B, Array("LOGIN_EQUAL_EXACT"=>$match[1],"ACTIVE"=>"Y"­)); //$match[1] содержит логин
       if($arUser = $res->GetNext())
       {
          //выводим данные пользователя
       }
       else
       {
          //ошибка: нет такого пользователя
       }
       require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.­php");
    }
    else
    {
       header("HTTP/1.1 404 Not Found");
       //ошибка
    }
    ?>


    Но жесткая проверка в preg_match не позволит сделать ссылки вида
    www.myserver.ru/users/user_login/?r1=banner&r2=com­puterra.ru, которые очень необходимы для анализа рекламных компаний. Поэтому, в начале файла 404.php пишем:

       
    $arURI = parse_url($_SERVER["REQUEST_URI"]);
    $_SERVER["REQUEST_URI"] = $arURI["path"];
    if(!empty($arURI["query"]))
    {
       parse_str($arURI["query"],$par);
       foreach($par as $key => $val)
       {
          global $$key;
          $$key = $val;
       }
    }


    - Примеры-


    Пример 1. Новости вида /about/news/23.html (ссылка для печати /about/news/print_23.html) вместо /about/news/detail.php?ID=23 (/about/news/detail.php?ID=23&print=Y)

    1.1 mod_rewrite
    RewriteEngine On
    RewriteBase /
    RewriteRule ^about/news/([0-9]+).html$ about/news/detail.php?ID=$1
    RewriteRule ^about/news/print_([0-9]+).html$ about/news/detail.php?ID=$1&print=Y

    1.2 Обработчик 404 ошибки
       
    <?

    if(preg_match("~^/about/news/(print_)?([0-9]+).html$~",$_SERVER["REQUEST_URI"],$match))
    {
        header("HTTP/1.1 200 OK");
        $_GET["print"] = (strlen($match[1])>0 ? "Y": "");
        $_REQUEST["ID"] = $match[2];
        include($_SERVER["DOCUMENT_ROOT"]."/about/news/detail.php");
    }
    else
    {
        define("ERROR_404", "Y");
        header("HTTP/1.1 404 Not Found");
        require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
        $APPLICATION->SetTitle("404 - файл не найден");
        require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
    }

    ?>


    Пример 2. Функция для создания идентификаторов
       
    <?
    function cyr_to_chpu($str)
    {
        $arCyr = Array("ё","й","ц","у","к","е","н","г","ш","щ","з","х","ъ","ф",
    "ы","в","а","п","р","о","л","д","ж","э","я","ч","с","м","и","т","ь","б","ю","Ё",
    "Й","Ц","У","К","Е","Н","Г","Ш","Щ","З","Х","Ъ","Ф","Ы","В","А","П","Р","О","Л",
    "Д","Ж","Э","Я","Ч","С","М","И","Т","Ь","Б","Ю");
        $arLat = Array("e","i","ts","u","k","e","n","g","sh","sch","z","h","",
    "f","y","v","a","p","r","o","l","d","zh","e","ya","ch","s","m","i","t","","b",
    "yu","e","i","ts","u","k","e","n","g","sh","sch","z","h","","f","y","v","a","p",
    "r","o","l","d","zh","e","ya","ch","s","m","i","t","","b","yu");

        $str = preg_replace("/[^a-zа-яА-Я0-9 ]/i","",$str);
        $str = preg_replace("/ +/"," ",$str);
        $str = str_replace($arCyr,$arLat,$str);

        if(strlen($str)<=0) return "";

        $str = preg_replace("/w+/ei","ucfirst('\0')",$str);
        $str = str_replace(" ","",$str);
        return $str;
    }

    echo cyr_to_chpu("Битрикс: управление сайтом"); //BitriksUpravlenieSaitom
    ?>

    -Смотри также-

    - Module mod_rewrite URL Rewriting Engine http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
    - Перевод на русский http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html
    - Еще одна статья на русском http://sitemaker.ru/technologies/webserver/mod_rewrite/
    - URL Rewriting Guide http://httpd.apache.org/docs/1.3/misc/rewriteguide.html

    - Регулярные выражения http://ru2.php.net/manual/ru/reference.pcre.pattern.syntax.php

    - Обработка 404 ошибки http://sitemaker.ru/technologies/webserver/error404handling/

    - Директива FilesMatch http://httpd.apache.org/docs/1.3/mod/core.html#filesmatch


    Какая структура таблиц БД "Битрикса"? Как мне писать свои SQL запросы?
    Концепция работы с продуктом предполагает работу с данными через функции API (http://www.1c-bitrix.ru/help/source/main/help/ru/developer/index.php.html).
    Структура данных может меняться от версии к версии, а функции сохраняют обратную совместимость.
    Концепция работы с продуктом предполагает работу с данными через функции API (http://www.1c-bitrix.ru/help/source/main/help/ru/developer/index.php.html). Структура данных может меняться от версии к версии, а функции сохраняют обратную совместимость.
    Мы настоятельно не рекомендуем использовать прямые запросы к БД, т.к. это может нарушить целостность данных и привести к неработоспособности сайта. Нормальная работа продукта в таком режиме не гарантируется и не поддерживается.

    У меня есть домен site.ru. Как в "Битриксе" настроить поддомены вида forum.site.ru?
    Настроить домены можно через DNS сервер хостинг-провайдера. PHP приложение не имеет доступа к настрокам DNS, изменить конфигурацию доменов из "Битрикс" невозможно. Вам необходимо обратиться к своему хостинг-провайдеру с вопросом настройки DNS. Настроить домены можно через DNS сервер хостинг-провайдера. PHP приложение не имеет доступа к настрокам DNS, изменить конфигурацию доменов из "Битрикс" невозможно. Вам необходимо обратиться к своему хостинг-провайдеру с вопросом настройки DNS.
    Некоторые аспекты вторичной настройки (нашего продукта) можно найти в другом вопросе: http://www.bitrixsoft.ru/faq/faq.php?ID=2379#25225
    Там же есть ссылки на документацию.


    Как использовать параметры PARAM1 и PARAM2 в модуле поиска?
    PARAM1 и PARAM1 используются для сужения области поиска.
    Для каждого модуля значение этих параметров разное.
    Для модуля инфоблоков:
    PARAM1 - тип инфоблока.
    PARAM2 - ID инфоблока.
    PARAM1 и PARAM1 используются для сужения области поиска.
    Для каждого модуля значение этих параметров разное.

    Для модуля инфоблоков:
    PARAM1 - тип инфоблока.
    PARAM2 - ID инфоблока.

    Пример вызова:
       
    <?
    if (CModule::IncludeModule('search'))
    {
    $q = "выставка";
    $module_id = "iblock";
    $param1='news';
    $param2=33;
    $obSearch = new CSearch($q,'ru', $module_id,false,$param1,$param2);
    if ($obSearch->errorno!=0):
      ?>
      <font class="text">В поисковой фразе обнаружена ошибка:</font>
      <?echo ShowError($obSearch->error);?>
      <font class="text">Исправьте поисковую фразу и повторите поиск.</font>
      <?
    else:
      while($arResult = $obSearch->GetNext())
      {
        <a href="<?echo $arResult["URL"]?>"><?echo $arResult["TITLE_FORMATED"]?></a><br>
        <?echo $arResult["BODY_FORMATED"]?><br>
        <hr size="1" color="#DFDFDF">
      }
    endif;
    ?>

    Поиск будет осуществляться в инфоблоке, который имеет тип "news" и код 33.


    Как кастомизировать стандартный компонент?
    Чтобы кастомизировать стандартный компонент Вам надо:
    1. Создать новое пространство имён компонентов в папке /bitrix/components/, например создать директорию /bitrix/components/my_components/.
    2. В созданную папку неодходимо скопировать папку с компонентом, который хотите изменить (копировать из папки /bitrix/components/bitrix/).
    Чтобы кастомизировать стандартный компонент Вам надо:
    1. Создать новое пространство имён компонентов в папке /bitrix/components/, например создать директорию /bitrix/components/my_components/.
    2. В созданную папку неодходимо скопировать папку с компонентом, который хотите изменить (копировать из папки /bitrix/components/bitrix/).

    В результате в визуальном редакторе у Вас отобразится кастомизированный компонент.

    http://www.bitrix.ru/help/source/main/help/ru/developer/general/component20/03.component_place.php.html
    http://www.bitrix.ru/help/source/main/help/ru/developer/general/component20/04.component_struct.php.html
    http://www.bitrix.ru/learning/course/index.php?COURSE_ID=18


    Как закрыть публичную часть сайта только для определённой группы пользователей?
    Данный функционал можно реализовать на основе обработки события OnProlog (вызывается в начале визуальной части пролога сайта).
    Для этого Вам надо в файл /bitrix/php_ibterface/init.php добавить приведённый ниже код
    Данный функционал можно реализовать на основе обработки события OnProlog (вызывается в начале визуальной части пролога сайта).

    Для этого Вам надо в файл /bitrix/php_ibterface/init.php добавить приведённый ниже код:

    function CloseAccessForGroup()
    {

            //объявляется глабальный объект "Пользователь" и "Приложение"
            global $USER, $APPLICATION;

           
    //смотрим в какой группе находится текущий пользователь (функция возвращает ID группы).
            $mas = $USER->GetUserGroupArray(); 

           
    /*проверяем, что пользователь находится хотя бы в одной группе
                        и с помощью PHP функции in_array проверяем находится ли группа
                        пользователя в списке запрещённых групп для доступа к публичной части сайта*/

            if (count($mas)>0 && in_array(1, $mas) && (strpos('/bitrix/admin/',$APPLICATION->GetCurPage()))===false)
            {
            

     
                                   /*здесь можно вставить произвольное сообщение о запрете доступа
                                     (но надо обязательно выполнить функцию
    die())*/
                 die('Access denied');
            }
    }


    //Здесь мы привязываем обработчик события к нашей функции
    AddEventHandler("main", "OnProlog", "CloseAccessForGroup");
    ?>



    Примеры использования функции in_array():
    in_array(1, $mas) - закрыть доступ к публичной части группе с ID=1 (т.е. администратору).
    in_array(4, $mas) - закрыть доступ к публичной части группе с ID=4
    in_array(Array (4, 6), $mas) закрыть доступ к публичной части группам с ID=4 и ID=6

    Ссылки по теме:
    http://ru2.php.net/manual/ru/function.in-array.php
    http://www.1c-bitrix.ru/help/source/main/help/ru/developer/reference/events/onprolog.php.html
    http://www.1c-bitrix.ru/help/source/main/help/ru/developer/reference/functions/module/addeventhandler.php.html
    http://www.1c-bitrix.ru/help/source/main/help/ru/developer/reference/cuser/getusergrouparray.php.html


    Как добавить новые данные в текст письма-уведомления, используя функцию Send?
    Для внесение новых данных в письмо-уведомление, например уведомление о новом заказе, следует получить эти данные,используя соответствующие API фукнции и занести в массив, который является входящим параметром функции Send.
    Функция Send генерирует событие, а поля указанные в массиве будут доступны для вставки в шаблоне соответствующего типа почтового события.
    Для внесение новых данных в письмо-уведомление, например уведомление о новом заказе, следует получить эти данные,используя соответствующие API фукнции и занести в массив, который является входящим параметром функции Send.
    Функция Send генерирует событие, а поля указанные в массиве будут доступны для вставки в шаблоне соответствующего типа почтового события. Например, в компоненте оформления заказа:

    $arFields = Array
    (
    "ORDER_ID" => $arResult["ORDER_ID"],
    "ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", SITE_ID))),
    "ORDER_USER" => ( (strlen($arResult["PAYER_NAME"]) > 0) ? $arResult["PAYER_NAME"] : $USER->GetFullName() ),
    "PRICE" => SaleFormatCurrency($totalOrderPrice, $arResult["BASE_LANG_CURRENCY"]),
    "BCC" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
    "EMAIL" => $arResult["USER_EMAIL"],
    "ORDER_LIST" => $strOrderList
    );
    $event->Send("SALE_NEW_ORDER", SITE_ID, $arFields, "N");

    Если добавить в массив $arFields строку "LID"=>SITE_ID, то в шаблоне типа почтового события "SALE_NEW_ORDER" можно поставить макрос #LID# - в теле письма, сформированного по этому шаблону, будет идентификатор сайта. Шаблон почтового события и тип почтового события добавляются в административной части:
    Настройки->Настройки продукта->Почтовые события->Почтовые шаблоны
    Настройки->Настройки продукта->Почтовые события->Типы почтовых событий

    Внимание! Данные изменения делаются в коде компонентов, которые следует сначала скопировать в пользовательское пространство имён. Если функция Send вызывается в ядре, проводить какие-либо изменения не рекомендуется.

    Справочная информация по функциям API:
    Общие сведения о системе почтовых событий
    Функция Send


    Заказчику не приходит уведомление о новом заказе, почему?
    Ошибочно думать, что уведомление о новом заказе отправляется на электронный адрес покупателя, который был указан при его регистрации на сайте. Уведомление отправляется на адрес, указанный в процессе оформления заказа. Чтобы дать возможность покупателю указать свой адрес следует создать соответствующее свойство заказа типа "[TEXT]СТРОКА"; и включить для этого свойства опцию "Использовать как E-Mail". Данное свойство становиться обязательным для заполнения автоматически. Ошибочно думать, что уведомление о новом заказе отправляется на электронный адрес покупателя, который был указан при его регистрации на сайте. Уведомление отправляется на адрес, указанный в процессе оформления заказа. Чтобы дать возможность покупателю указать свой адрес следует создать соответствующее свойство заказа типа "[TEXT]СТРОКА"; и включить для этого свойства опцию "Использовать как E-Mail". Данное свойство становиться обязательным для заполнения автоматически.

    Магазин->Настройки магазина->Свойства заказа->Список свойств

    Также следует удостоверится, что в шаблоне типа события SALE_NEW_ORDER в поле "Кому" или "Скрытая копия" было указано шаблон "#EMAIL#";, вместо которого и будет подставляться значение созданного вами свойства заказа.

    Настройки->Настройки продукта->Почтовые события->Почтовые шаблоны

    Если свойства заказа, отмеченного как e-mail, нет, то письма отправляться не будут.


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

    В данном случае следует запретить не только отображение значения цены в каталоге, но и покупку по цене данного типа.
    Настройка типов цен:
    Рабочий стол->Магазин->Торговый каталог->Типы цен