Добрый день!
Мы переместили этот репозиторий в архив, чтобы показать, что мы больше не принимаем новые компоненты для Турбо-страниц. Мы благодарны всем разработчикам, которые создавали компоненты, а вебмастерам за их использование на Турбо-страницах своих проектов.
Опираясь на фидбек партнеров, мы пришли к тому, что все доступные элементы и блоки – https://yandex.ru/dev/turbo/doc/rss/elements/index.html и опубликованные в документации компоненты https://yandex.ru/dev/turbo/doc/rss/elements/directadvert.html максимально покрывают спрос на внедрение их на ваши Турбо-страницы.
Тем не менее, если вы нашли то, что требует исправления в существующих компонентах, вы всегда можете написать нам в службу поддержки Турбо-страниц – https://yandex.ru/dev/turbo/doc/concepts/troubleshooting.html
Репозиторий с кодом пользовательских компонентов, которые могут быть использованы на Турбо-страницах.
production
?)Для начала необходимо выполнить команды:
git clone git@github.com:turboext/components.git components
cd components
npm i
npm start
Проверяем работу репозитория: переходим на http://localhost:8081/render/ext-exchange-rates/default
.
После того, как мы настроили среду, можно приступить к написанию своего компонента.
Для его создания необходимо соблюдать соглашение по наименованию:
components/
└── ExtFancyButton
├── ExtFancyButton.examples
│ └── default.xml
├── ExtFancyButton.scss
└── ExtFancyButton.tsx
То, есть все кастомные блоки лежат в корневой директории components
.
Отдельный блок имеет свою директорию, начинается с Ext
и используют pascal case
для наименования.
Например, в данном случае:
ExtFancyButton
— директория с блоком.
Компонент называется так же, как и директория.
Например, в данном случае:
ExtFancyButton.tsx
— файл входа в блок (будет вызван с пришедшими данными на сервере и гидрирован на клиенте).
<Component-Name>.examples
- директория с примерами данных для отображения блока. Используется для отладки.
Например, в данном случае:
ExtFancyButton.examples
— директория с примерами к блоку.
Примеры именуются свободно, и имеют расширение .xml
Например, в данном случае:
default.xml
— единственный пример для блока.
Все примеры описываются в xml формате, как содержимое rss
-файла. Пример:
<ExtExchangeRates data-rates='["USD","EUR","CHF","GBP","JPY","AUD","CZK"]'></ExtExchangeRates>
Данные можно передавать с помощью data-
аттрибутов, в компонент они придут как пропсы с такими же
названиями, но сериализованные для удобства:
"123"
или "123.123"
),
то в качестве аргумента в компонент будет передано число'{"a": "b"}'
или '["USD","EUR"]'
).Правила разработки находятся в развитии и могут быть изменены в будущем.
Если вы хотите делать ajax запросы, то их возможно совершать только к API, находящемуся на одном домене с вашим сайтом. Например: для сайта rozhdestvenskiy.ru можно совершать ajax запросы только к домену rozhdestvenskiy.ru Запросы, например, к aws.com будут заблокированы политиками CSP При этом надо использовать CORS и нельзя передавать Cookie yandex.ru домена.
Запрещается работать с window.location
и window.open
.
Использование пользовательского компонента не подразумевает под собой размещение рекламы в каком-либо виде. Для обеспечения надлежащей работы Турбо-страниц при размещении рекламы на Турбо-страницах необходимо использовать специальные форматы рекламных блоков, которые доступны в интерфейсе ADFOX(1) или РСЯ(2), и интерфейс Яндекс.Вебмастера для указания соответствующих идентификаторов блоков.
1 – ссылка на хелп ADFOX https://yandex.ru/support/adfox-sites/code/adfox-turbo.html 2 – ссылка на хелп Вебмастера https://yandex.ru/dev/turbo/doc/settings/ads-docpage/
Для создания компонентов-виджетов, загружающих для своей работы внешние скрипты, необходимо использовать существующий компонент ExtEmbed (документация).
Все блоки пишутся строго на typescript
. Точка входя для блока должна экспортировать class или простую (не стрелочную) функцию, названные так же, как и компонент.
Валидные записи:
export class ExtExchangeRates extends React.PureComponent<IProps> {}
export function ExtExchangeRates () {}
Невалидные записи:
export const ExtExchangeRates = () => {}
export default function ExtExchangeRates () {}
При импорте он будет вызван как реакт-компонент, а в качестве пропсов ему будут переданы данные из rss. Внутри компонента можно импортировать стили, которые приедут вместе с ним.
Код компонента доступен по ссылке /render/<component-name>/<example-name>
. Список всех примеров можно
посмотреть на заглавной странице.
pull-request
в репозиторийproduction
?):Мы используем много самых разнообразных линтеров для контроля качества кода.
.scss
) мы используем stylelint.tsc
.Часть из них запускается перед коммитом, часть — перед пушем в удаленный репозиторий.
Если линтер падает на прекомите, можно сначала попробовать поправить изменения автоматически с помощью команды:
npm run lint:fix
.
В случае каких-либо проблем или вопросов вы можете создать issue
.