Такая необходимость действительно возникает, особенно на уже работающих проектах, так что трудно сказать, кто что неправильно спроектировал. В частности, компонент иногда должны вставлять люди, которым нежелательно давать доступ к php, шаблонам и т.д. Чтобы вставить компонент в произвольное место на сайте, можно использовать примерно такой подход:
1. Декларировать псевдокод для компонента, который будет вставляться в текст элемента инфоблока контентщиком. Допустим, это юзеро-зависимый баннер c параметром и код его вставки выглядит примерно так: #USERBANNER|PARAM#.
2. Выбирается место, где будет происходить обработка псевдокода. Это может быть компонент, шаблон компонента, модификатор компонента, хендлер события OnEndBufferContent.
3. С помощью preg_match_all в тексте находятся все псевдокоды вызова компонента и определяются параметры вызова.
4. Текст статьи разделяется на части через preg_split (или explode, если нет параметров) на массив фрагментов, между которыми следует вставлять компонент.
5. В шаблоне компонента выводятся элементы массива из п.4, между которыми вставляется код подключения компонента с параметрами из п.3.
1. Декларировать псевдокод для компонента, который будет вставляться в текст элемента инфоблока контентщиком. Допустим, это юзеро-зависимый баннер c параметром и код его вставки выглядит примерно так: #USERBANNER|PARAM#.
2. Выбирается место, где будет происходить обработка псевдокода. Это может быть компонент, шаблон компонента, модификатор компонента, хендлер события OnEndBufferContent.
3. С помощью preg_match_all в тексте находятся все псевдокоды вызова компонента и определяются параметры вызова.
4. Текст статьи разделяется на части через preg_split (или explode, если нет параметров) на массив фрагментов, между которыми следует вставлять компонент.
5. В шаблоне компонента выводятся элементы массива из п.4, между которыми вставляется код подключения компонента с параметрами из п.3.