Дата последнего изменения: 03.07.2023
Очень часто в коде компонентов, для того чтобы сгенерировать какие-то уникальные идентификаторы используются методы randString и rand. В нашем случае эти методы плохи тем, что при каждом выполнении дают новые случайные значения. Вследствие чего статическая часть страницы изменяется, что приводит к перезаписи страницы на диск.
Для устранения этой проблемы был разработан специальный метод псевдопоследовательностей (псевдослучайный генератор), который просидирован в зависимости от названия компонента и номера его подключения на странице. Соответственно, разные компоненты, расположенные на странице, будут иметь разные источники псевдослучайных величин и эти псевдослучайные строки будут одинаковы в рамках какого-то конкретного компонента. Что обеспечит стабильную генерацию и избавит от перезаписи статических страниц на диск.
Например, на странице встречаются два компонента и в каждом из них вызывается randString(); по нескольку раз и каждому вызову присваивается свой идентификатор. Если удалить первый компонент, то идентификаторы второго останутся без изменений. И если в первом добавить/удалить вызовы, то и в этом случае идентификаторы второго останутся без изменений.
Метод randString() класса CBitrixComponent обеспечивает стабильную генерацию псевдослучайных величин. Сколько раз его ни вызывай в шаблоне это не повлияет на другие компоненты/шаблоны.
Для вызова, что в компоненте, что в шаблоне можно и нужно писать так:
$this->randString();
Например: генерация видеоблока, где используется случайный ID.