Статьи

Совет: как создавать настраиваемые HTML-виджеты в Jekyll

Настраиваемые виджеты HTML в Jekyll

Генератор статических сайтов Jekyll известен в кругах веб-дизайна как легкий и «хакерский». Но это только часть правды. Jekyll удивительно мощен с точки зрения того, что вы можете с ним сделать, и насколько удобно для пользователя, если вы не техничные пользователи и клиенты.

В этом кратком совете я покажу, как вы можете создавать HTML-виджеты, которые ваши клиенты или члены команды могут легко настраивать и включать в любом месте проекта Jekyll — не требуется никаких плагинов Ruby, просто Liquid , язык шаблонов с открытым исходным кодом, созданный Shopify, и хороший старый HTML.

Установка переменных

Есть несколько способов установки переменных для настройки. В этой статье я расскажу о двух из них: метод inline и метод Front .

Встроенные переменные

Установка переменных inline — лучший вариант, если есть большая вероятность, что виджет будет включен более одного раза, скажем, в блоге. В этом примере я буду использовать кнопку PayPal.

Сначала создайте новый файл с именем paypal-widget.html в вашей папке _includes . Затем заполните его этим кодом:

 <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top"> <input name="cmd" type="hidden" value="_s-xclick"> <input name="hosted_button_id" type="hidden" value="VALUE"> <button class="buy-button" name="submit">Buy Now</button> <img src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" alt="" width="1" height="1" border="0" style="display: none !important;"> </form> 

В приведенном выше примере будет сгенерирована простая кнопка «Купить сейчас», позволяющая людям совершать платежи через PayPal. Есть только одна проблема: код статичен и не может быть изменен.

Виджет имеет два элемента, которые вы хотите сохранить динамическими: value hosted_button_id и метку button . Достижение этого с помощью встроенных переменных выполняется быстро:

 <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top"> <input name="cmd" type="hidden" value="_s-xclick"> <input name="hosted_button_id" type="hidden" value="{{ include.id }}"> <button class="buy-button" name="submit">{{ include.button }}</button> <img src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" alt="" width="1" height="1" border="0" style="display: none !important;"> </form> 

Добавленные переменные включают include.id и include.button . Когда вы будете готовы включить виджет HTML внутри, скажем, поста Markdown, вы можете просто сделать это:

 {% include paypal-widget.html id="EXAMPLE-ID" button="Buy Now | $30" %} 

Это создаст кнопку с надписью «Купить сейчас | $ 30” . Вы можете включить один и тот же файл несколько раз на одну и ту же страницу, каждый с разными значениями include.id и include.button , так как они устанавливаются по отдельности.

Переменные Front Matter

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

Как и прежде, начните с создания нового файла в папке _includes вашего проекта Jekyll, назовите его чем-то значимым, например, signup-widget.html . Затем заполните его этим кодом:

 <div class="signup-cta"> <h2>Sign up to the newsletter</h2> <p>Receive daily updates straight to your inbox—just fill out your name and email address and hit Submit!</p> <form method="POST"> <input id="name" placeholder="First name"> <input type="email" placeholder="Email address"> <button type="submit">Submit</button> </form> </div> 

В этом примере есть три элемента, которые вы хотите сохранить динамическими: текст h2 текст элемента p под ним и текст button :

 <div class="signup-cta"> <h2>{{ page.cta.title }}</h2> <p>{{ page.cta.body }}</p> <form method="POST"> <input id="name" placeholder="First name"> <input type="email" placeholder="Email address"> <button type="submit">{{ page.cta.button }}</button> </form> </div> 

Теперь, когда вы включите его в пост или страницу Markdown, определите следующие переменные в Front с помощью Yaml :

 --- cta: title: "Get the newsletter" body: "Like this blog post? Sign up to receive more content like this, delivered straight to your inbox every day." button: "Sign me up!" --- 

И затем вы можете включить виджет в любом месте текста, так же, как вы сделали с другим примером:

 {% include signup-widget.html %} 

Результат после добавления CSS выглядит следующим образом:

Jekyll Newsletter зарегистрироваться виджет в действии

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

Вывод

Ну, вот и все. Два быстрых и простых способа создания мощных модулей для вашего проекта Jekyll. Возможности этого метода безграничны, и я хотел бы услышать, как вы в конечном итоге используете его в комментариях ниже. Я рад ответить на любые ваши вопросы.