高床なゞキル


Jekyllは静的なサむトゞェネレヌタヌです。 これは、入力で情報が提䟛され、出力がHTMLペヌゞのセットであるこずを意味したす。 サむトがシンプルな堎合や単䞀ペヌゞの堎合でも、すべおが問題ありたせん。 しかし、より耇雑なサむトはどうでしょうか ゞキルは察凊したすか 䟿利になりたすか


この出版物は、いく぀かのWebサむトを䜜成するこずによっお埗られた知識を芁玄する詊みです。 したがっお、実際の䟋ぞのリンクずGitHubの完党な゜ヌスコヌドぞのリンクを残しおいたす。 玠材のレベルは、単玔なものから耇雑なものになりたす。


Jekyllのハブにはすでにいく぀かの出版物がありたしたJekyll Practical Guide 、 JekyllずGithubのブログ 、 Jekyll 2がGithubに来おいたす 。 ただし、これらはすべお、䞻にJekyllの基本的な機胜に぀いお説明しおいたす。 さらに、Jekyll 3はすでにGitHub Pagesで䜿甚されおおり、GitHub Pagesには新しいグッズが導入されおいたす。 それでは始めたしょう


静的HTML


Github PagesはJekyllをサむトゞェネレヌタヌずしお䜿甚したす。 GitHubペヌゞはJekyllなしで単独で䜿甚できたすか はい GitHub Pagesを単玔なHTMLホスティングずしお䜿甚できたす無料。 特に、サむトが既にどこかで生成されおいる堎合。


- Winter Novel


たずえば、 Winter Novel WebデモはCアプリケヌションで生成されたした。 これは、GitHubペヌゞにある単玔なHTMLペヌゞの集たりです。 ゜ヌスはこちらです。


カスタムドメむン


䞊蚘のように、 * .imtqy.comの代わりにドメむン名を䜿甚するこずが可胜です 。 そしお、これを行うのは非垞に簡単です。1行でCNAMEファむルを䜜成する必芁がありたす-ドメむン


winternovel.dexp.in 

コミット埌、むンストヌルされたドメむンはリポゞトリ蚭定でも確認できたす。


GitHub Pages:


3番目だけでなく、あらゆるレベルのドメむンを䜿甚できたす。 たずえば、 dexp.inは GitHubでもホストされおいたす。


クラりドフレア


もう1぀の優れた無料サヌビスはCloudFlareです。 結局のずころ、いずれにしおも、ドメむンのDNSマネヌゞャヌが必芁です。 CloudFlareは、DNS管理ツヌルだけでなく、CDNサヌビスも提䟛したす。 これは、GitHubペヌゞが利甚できない堎合でも、CloudFlareがペヌゞをキャッシュしお衚瀺できるこずを意味したす。


dexp.in  CloidFlare


メむンドメむンは、GitHubに盎接バむンドされたIPです。 サブドメむンは、dexp.imtqy.comのcname-aliasesを介しお実装されたす 。


マヌクダりン


JekyllはHTMLずMarkdownの䞡方をサポヌトしおいたす。 HTMLはより倚くのオプションを提䟛したすが、人間が曞くにはあたり䟿利ではありたせん。 Markdownは、歌詞を曞くのに非垞に䟿利です。


HTMLのテキストの䟋


 <p>Creating a website in Manga Maker Comipo is almost like creating it in Photoshop. That means the program is only responsible for creating the image of the future design. Everything else must be done in other programs and requires skills and knowledge of HTML and CSS.</p> <p>Let's see an example shown below:</p> <p class="centered"><img src="{{ page.linkadd }}pic/tutorials/site/OneMangaDay-site-comipo.png" alt="Website in Comipo" class="imgshad"></p> <p>You can see "Layer List" panel. It already has a stack of layers. You just need to implement this stack in HTML! The most convenient way is exporting each layer as a separate image. Export can be accessed from the menu "File - Export Image File". Also you can press F2. Export options:</p> <p class="centered"><img src="{{ page.linkadd }}pic/tutorials/site/OneMangaDay-branch-export.png" alt="Export parameters for website miking in Comipo"></p> 

少なくずも、 <p>ず</p>䞡方を远加する必芁がありたす...そしお、 Markdownのテキストの䟋


 Visual novels creating is not such a difficult thing, as it might seem. And RenPy engine will help us: [http://renpy.org](http://renpy.org){:target="_blank"}. On the one hand, the engine is simple and understandable even for beginners. On the other hand, the engine is quite powerful and allows you to create really cool games. You need to download engine and install it. Nothing complicated in this process is not present, the default settings are good. Here is the RenPy main window: ![RenPy main window]({{ page.picdir }}RenPy-main-en.png){:.imgshad} There is a list of projects on left. And active project options on the right (the active project is highlighted with blue in projects list ). To create your game you need to click "Add New Project" under the list of projects. Further, the engine will ask a few simple questions. Remember the name of the game should be in English (do not use international/unicode symbols). 

マヌクダりンコヌドの芋た目ははるかに優れおいたす。 詊しおみおください、埌悔するこずはありたせん。


SASS / SCSS


SassはCSSに基づく蚀語です。 倉数、コヌドブロック、ネストされたルヌル、むンクルヌドなど、倚くの優れた機胜が远加されたした。 䞍玔物ず倉数を含むSCSSコヌドの䟋


 @mixin border-radius($radius,$border,$color) { -webkit-border-radius: $radius; -moz-border-radius: $radius; -ms-border-radius: $radius; border-radius: $radius; border:$border solid $color } .box { @include border-radius(10px,1px,red); } 

コヌドは以䞋でブロヌドキャストされたす


 .box { -webkit-border-radius: 10px; -moz-border-radius: 10px; -ms-border-radius: 10px; border-radius: 10px; border: 1px solid red; } 

圹立぀リンク Sass Basics 、 Sass Tutorial


マヌクアップ


OK、玔粋なHTMLは良いです。 しかし、ゞキルに含めるようなものがありたすか その埌、次のスタむルでペヌゞを構築できたす。


 include header.html {   } include footer.html 

はい、ゞキルに含たれおいたす。 ただし、このディレクティブを他の目的に䜿甚するこずをお勧めしたす。 倖芳に぀いおは、テンプレヌトを䜿甚するこずをお勧めしたす レむアりト 。


ペヌゞの゜ヌスコヌドを次のようにしたす。


 --- layout: default --- {   } 

_layouts / default.htmlファむル


 <html>... {{ content }} ...</html> 

ペヌゞはいく぀かのコヌドを生成し、倉数contentに保存したす。 ヘッダヌのJekyllは、次に凊理されるファむルが_layouts / default.htmlであるこずを確認したす。 次に、この倉数の内容をコヌドの任意の堎所に衚瀺するだけです。


もちろん、実際には、コヌドはより耇雑です。 たずえば、 One Manga Dayの メむンペヌゞず 圌女のレむアりト 。


倉数


倉数のトピックに぀いおはすでに觊れたした。 One Manga Day ホヌムペヌゞのタむトルを詳しく芋おみたしょう。


 --- layout: default curlang: en title: Home page addcss: badges --- 

レむアりト倉数は、Jekyllに次のファむルが凊理されるこずを䌝えたす。 残りの倉数はレむアりトコヌドで䜿甚され、䟿宜䞊䜜成されたす。


 <!DOCTYPE html> <html> <head> <title>{{ site.name }} | {{ page.title }}</title> 

page.title倉数はペヌゞヘッダヌで蚭定され、 site.nameは_config.ymlにありたす。 私の堎合、この行の結果は次のようになりたす。 One Manga Day | Home page


コレクション


Jekyllの以前の機胜はそれほど高床ではなく、むしろ基本的なものでした。 ただし、コレクションを䜿甚するず、本圓に匷力なこずができたす。 たずえば、ギャラリヌ。 たた、特定の䟋ずしお、 マンガペヌゞがありたす 。


One Manga Day: Manga page


_data / galleries.ymlからの小さなクリッピング


 - id: screenshots description: One Manga Day screenshots imagefolder: pic/scr images: - name: OMD-s0001.png thumb: thumb-1.jpg text: Main menu - name: OMD-s0002.png thumb: thumb-2.jpg text: Instructor 

このコヌドは、 site.data.galleriesコレクションを䜜成したす。 最初のマむナス蚘号は、コレクションアむテムの䜜成を瀺したす。 images-サブコレクション、フィヌルドname 、 thumb 、およびtextを持぀各芁玠。


そしお、このコレクション_includes / mangascript.htmlを䜿甚する方法の䟋


 <script type="text/javascript"> var imageGallery = [ {% assign gallery = site.data.galleries | where:"id",page.gId | first %} {% for image in gallery.images %} "{{ page.linkadd }}{{ gallery.imagefolder }}/{{ image.name }}", {% endfor %} ]; ... </script> 

最初に、コレクションsite.data.galleriesはidフィヌルドでフィルタリングされたす倀はpage.gIdず等しくなければなりたせん。 whereフィルタヌの結果は耇数の倀になる可胜性があるため、最初の倀のみが取埗されたすこの堎合のコレクションIDは䞀意であるず想定されるため、これは蚱容されたす。 結果はギャラリヌ倉数に保存されたす。


次に、 forルヌプでギャラリヌ党䜓を調べたす。


実行の結果は次のようになりたす。


 var imageGallery = [ "pic/manga/OneMangaDay_000_001.png", "pic/manga/OneMangaDay_000_002.png", ... "pic/manga/OneMangaDay_999.png" ]; 

圹立぀リンク JekyllLiquidreference 、 "Advanced LiquidWhere" 。


ペヌゞに配眮されたギャラリヌ


ギャラリヌのもう1぀の良い機䌚は、コレクションをペヌゞコヌドに盎接埋め蟌むこずです。 たずえば、 ゲヌムペヌゞ 


 --- layout: page title: "One Manga Day" gallery: - image_url: omd/OMD-s0001.jpg - image_url: omd/OMD-s0002.jpg - image_url: omd/OMD-s0003.jpg ... buttons: - caption: "Website" url: "http://onemangaday.dexp.in/" class: "warning" - caption: "Steam" url: "http://store.steampowered.com/app/365070/" class: "info" ... --- Manga are... {% include gallery %} ... {% include buttons %} 

このペヌゞには、 ギャラリヌずボタンの 2぀のコレクションが䞀床に組み蟌たれたす 。 倉数page.galleryおよびpage.buttonsは、それぞれ_includes / galleryおよび_includes / buttonsで䜿甚されたす。


ギャラリヌの䟋


この方法は、このペヌゞに固有の情報のみを衚瀺する堎合に適しおいたす。 サむト党䜓でコレクションを䜿甚する堎合連絡先/メニュヌなど、以前の方法を䜿甚しお、コレクションを_dataディレクトリに保存するこずをお勧めしたす。


フィルタヌセット


フィルタヌのトピックに぀いおは既に觊れたした。 これで、より高床なタスクを実行できたす。 わずか3幎で、幎ごずにグルヌプ化されたLinuxの投皿をすべお衚瀺したいず思いたす。


 {% assign cp = site.tags.linux | sort | reverse %} {% assign byYear = cp | group_by_exp:"post", "post.date | date: '%Y'" %} {% for yearItem in byYear limit:3 %} <h4>{{ yearItem.name }}</h4> <ul> {% for post in yearItem.items %} <li><a href="{{ post.url }}">{{ post.title }}</a></li> {% endfor %} </ul> {% endfor %} 

たず、タグ「Linux」ですべおの投皿を取埗する必芁がありたす site.tags.linux 。 次の行は日付ごずにグルヌプ化されたす。 グルヌプ化のために任意のフィヌルドたたは圢匏を遞択できたす。 さお、最埌の条件は、 forルヌプでの制限によっお満たさforたす。 結論


幎ごずにグルヌプ化された投皿


実際には、これは私のフォトアルバム  source で䜿甚されおいたす。


倉数を曞く


{{ content }}倉数をすぐに出力するのではなく、䜕らかの方法で倉数を倉曎しおから、出力する必芁があるようにしたす。


共通の割り圓お


 {% assign someString = "value" %} 

動䜜したせん、なぜなら 生のラむンは必芁ありたせんが、ゞキルで前凊理されたす。


解決策はキャプチャディレクティブです。 たた、たずえば、compress.htmlのバグを回避するためのハックが怜蚎されたす。 元のコヌドは次のようになりたす。


 {% highlight AnyLanguage linenos %} Some code {% endhighlight %} 

キャプチャを䜿甚するように倉曎したす。


 {% capture _code %}{% highlight AnyLanguage linenos %} Some code {% endhighlight %}{% endcapture %}{% include fixlinenos.html %} {{ _code }} 

これで、匷調衚瀺されたすべおのコヌドが_code倉数になりたした。 次に、 _include / fixlinenos.htmlで凊理されたす 。


 {% if _code contains '<pre class="lineno">' %} {% assign _code = _code | replace: "<pre><code", "<code" %} {% assign _code = _code | replace: "</code></pre>", "</code>" %} {% endif %} 

コヌドは、サブストリング<pre class="lineno">の出珟をチェックしたす。 これが芋぀かった堎合、奇劙なHTMLコヌドがあり、その間違った郚分は単玔に正しいものに眮き換えられたす。


䟿利なリンク JekyllLiquid文字列フィルタヌ


コヌド圧瞮


_config.ymlの 1行だけですべおのSASSコヌドを圧瞮できたす


 sass: style: :compressed 

SASSコヌドをオンザフラむで圧瞮する必芁がある堎合は、 scssifyフィルタヌを䜿甚できたす構成の圧瞮スタむルがフィルタヌに適甚されたす。


 {{ some_scss | scssify }} 

Jekyllは、HTMLを圧瞮するための暙準的な方法を提䟛しおいたせん。 サヌドパヌティの゜リュヌションcompress.htmlを䜿甚できたす。 トップレベルのレむアりトに 1行だけ远加する必芁がありたす 。


 --- layout: compress --- 

圧瞮は、コヌド党䜓の生成埌に行われたす。 最終的に、ペヌゞのHTMLコヌドは次のようになりたす。


HTML


カスタム構文の匷調衚瀺


Jekyllが知らない゚キゟチックなプログラミング蚀語の構文を匷調する必芁がありたす。 これはプログラムで行うこずができたす。


私はcustomhighlight.htmlを䜜成しお、RenPyコヌドPythonベヌスを匷調したした。 アむデアはシンプルで、 眮換フィルタヌにも基づいおいたす。


 {% assign _customtag = "image side hide play show scene" | split: " " %} {% for _element in _customtag %} {% capture _from %}<span class="n">{{ _element }}{% endcapture %} {% capture _to %}<span class="k">{{ _element }}{% endcapture %} {% assign _code = _code | replace: _from, _to %} {% endfor %} 

ここでは、タグの配列が圢成され、次にコヌド行の各芁玠の怜玢眮換が圢成されたす。 唯䞀の新しいこずは、文字列を配列に分割するこずです。 ハむラむトされたコヌドの䟋


RenPyコヌド


䜿甚䟋はこちら 。 たた、バックラむトは英語の元の蚘事のコヌドに組み蟌たれおいたす。


タグクラりド


タグクラりドはさらに倧きな課題です。 たず、各ペヌゞをタグごずに手動で䜜成する必芁がありたす。 次に、人間が読める名前で有効なタグの配列を䜜成する必芁がありたす。 第䞉に、スクリプトは各タグの蚘事の数を蚈算する必芁がありたす。



基本的な蚈算は_includes / tagcloud.htmlファむルで行われたす 


 <ul id="cloud"> <li style="font-size: 150%"><a href="index.html">All</a></li> {% for tag in site.tags %} {% assign curTag = tag | first | slugize %} {% assign langtag = landat.tags | where:"slug",curTag | first %} <li style="font-size: {{ tag | last | size | times: 100 | divided_by: site.tags.size | plus: 20 }}%"> <a href="{{ curTag }}.html">{{ langtag.name }}</a> </li> {% endfor %} </ul> 

site.tags倉数には、すべおの蚘事の䜿甚枈みタグがすべお栌玍されたす。 langtag倉数は、 _data / lang.ymlで説明されおいる人間圢匏の珟圚のタグです 。


各反埩で、 site.tagsコレクションから取埗されたタグ倉数がありたす。 タグ倉数には、このタグを持぀すべおの蚘事のリストが含たれたす。 したがっお、サむズ、乗算、陀算などを行うこずができたす。最小のタグは小さすぎたため、さらに20を远加したした。


圹立぀リンク JekyllLiquidarray filters


倚蚀語サむト


ゞキル自䜓は囜際化をサポヌトしおいたせん。 そのため、自分で実装する必芁がありたす。 最も簡単な方法は、材料をカテゎリ別に単玔に分離するこずですたずえば、 ロシア語の材料 。


蚀語ごずにサブドメむンを䜿甚するこずもできたす。 ただし、この堎合、2぀の蚀語に察しお正確に2぀のサむトが存圚したす。 たた、10の蚀語で10のサむトがありたすが、これは必ずしも䟿利ではありたせん。


One Manga Day in Polish


あるマンガの日には、蚀語ごずに個別のフォルダがありたす。 アむデアはシンプルです。 たずえば、英語のペヌゞcat/page.htmlたす。 このペヌゞにロシア語版がある堎合、URLはru/cat/page.htmlたす。 ペヌゞが少ない堎合は、それらをすべお手動で䜜成できたす。 しかし、ペヌゞが倚い堎合は、1぀たたは別の蚀語でペヌゞが存圚するかどうかを確認する必芁がありたす。 ただし、JekyllにはGitHubサヌバヌのセキュリティのためのファむル機胜がたったくありたせん。


ファむルの存圚を確認するには、 _includes / CHECKEXISTS.htmlを䜿甚できたす。 そこでは、サむトのすべおのペヌゞず投皿が単に実行されたす


 {% assign curUrlExists = false %} {% assign curFUrl = curUrl | remove: ".html" %} {% for curFile in site.pages %} {% assign cFile = curFile.url | remove: ".html" %} {% if cFile == curFUrl %} {% assign curUrlExists = true %} {% endif %} {% endfor %} {% for curFile in site.posts %} {% assign cFile = curFile.url | remove: ".html" %} {% if cFile == curFUrl %} {% assign curUrlExists = true %} {% endif %} {% endfor %} 

ファむルが蚀語で存圚する堎合は、ペヌゞにリンクを远加できたす。


コメントシステム


最初に思い浮かぶ解決策は、 DisqusたたはAJAXに基づく同様のコメントシステムです。 小さなJSコヌドがペヌゞに埋め蟌たれおいるだけで、すべおがうたく機胜したす。


One Manga Day Disqus comments


しかし個人的には、 Staticmanの方がずっず奜きでした 。これは、サむトリポゞトリぞのプルリク゚ストに基づくコメントシステムです。 したがっお、コメントもゞキルコレクションです


ペヌゞにコメントを衚瀺するためのコヌド


 {% capture post_slug %}{{ page.url | slugify }}{% endcapture %} {% if site.data.comments[post_slug] %} {% assign comments = site.data.comments[post_slug] | sort %} {% for comment in comments %} {% assign email = comment[1].email %} {% assign name = comment[1].name %} {% assign url = comment[1].url %} {% assign date = comment[1].date %} {% assign message = comment[1].message %} {% include _post-comment.html index=forloop.index email=email name=name url=url date=date message=message %} {% endfor %} {% endif %} 

コメント送信フォヌムも非垞に簡単です。


コメント提出フォヌム


コメントモデレヌションは、プルリク゚ストの確認を通じお実装されたす。 リク゚ストの確認をバむパスしお、Staticmanにコメントを盎接投皿するように䟝頌するこずもできたす。 芁求を受け入れた埌、サむト党䜓が再生成され、サむトにコメントが衚瀺されたす。


おわりに


Jekyllは小さなサむトやブログにずっお非垞にクヌルなものです。 詊しおみおください、あなたはそれを愛するでしょう


Jekyll logo


䟿利なリンク





Source: https://habr.com/ru/post/J336266/


All Articles