2012-11-24 17 views
12

Właśnie przeniosłem cały mój blog z WordPressa na Jekyll. Nadal istnieją pewne elementy, które wymagają naprawy tu i tam, ale w tej chwili stoję w obliczu tego problemu. Nie mogę generować map witryn w Jekyll. Zobaczyłem, że istnieje kilka wtyczek, które mogą wykonać pracę dla mnie.Generuj mapę witryny w Jekyll bez wtyczki

informacji na stronie:

  • strony hostowane przez strony GitHub
  • Cały teren handcoded - nie używając JB lub Octopress

Byłoby wspaniale, gdyby można uzyskać pewne wskazówki w kierunku jak zrobić wymagane.

Uwaga: to pytanie nie jest tożsame z jego poprzednikami. Nie szukam opcji, które używają _site.

Odpowiedz

10

Można utworzyć nowy plik w katalogu głównym witryny o nazwie "sitemap.xml", a na stronie tej użyć znaczników płynnych do iterowania po wszystkich stronach i wpisach wyodrębniających niezbędne dane. Wydaje się, że to by było całkiem łatwe, zakładając, że chcesz wygenerować stronę, która zawiera listę wszystkich stron w witrynie w formacie xml, który jest zgodny z odpowiednim standardem.

+1

Możesz to zrobić z wpisami, tak, ale nie ze stronami. Jeśli masz jakieś inne statyczne strony, np. Strona "O mnie" nie będzie częścią tablicy site.posts. Dlatego mapa witryny będzie niekompletna z tym wnioskiem. – Polygnome

+3

Polygnome - to nie jest poprawne. Istnieje narzędzie: pages accessor umożliwiające dostęp do wszystkich stron (nie do postów) za pośrednictwem '{% dla strony w site.pages%}'. Odpowiednie źródło znajduje się tutaj: https://github.com/mojombo/jekyll/blob/master/lib/jekyll/site.rb – heliotrope

+0

Interesujące. Nie jest wymienione w https://github.com/mojombo/jekyll/wiki/Template-Data. Może ją tam dodasz? – Polygnome

2

Nie można automagicznie wygenerować pełnej mapy witryny w jekyll bez korzystania z wtyczek.

Co można zrobić, to stworzyć własny skrypt ruby ​​(lub innego), który generuje mapę witryny jako dane JSON, a następnie wstawić ją do pliku config.yml. Stamtąd można uzyskać dostęp do danych z jekyll i wyświetlić go.

Ale nie ma wbudowanego sposobu, aby zrobić to samo z jekyll.

10

Jak wyjaśnił John Day w this article, można utworzyć plik sitemap.xml w katalogu głównym witryny z tej treści:

--- 
layout: nil 
title : "Sitemap" 
sitemap_exclude: y 
--- 
<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
    {% for post in site.posts %} 
    <url> 
     <loc>{{site.production_url}}{{ post.url | remove: 'index.html' }}</loc> 
    </url> 
    {% endfor %} 

    {% for page in site.pages %} 
    {% if page.sitemap_exclude != 'y' %} 
    <url> 
     <loc>{{site.production_url}}{{ page.url | remove: 'index.html' }}</loc> 
    </url> 
    {% endif %} 
    {% endfor %} 
</urlset> 

W _config.yml zdefiniować zmienną o nazwie production_url z pełnym bazowym URL witryny (np http://example.com) .

Jeśli chcesz wykluczyć jakiekolwiek linki z mapy witryny, dołącz sitemap_exclude: y w pierwszej sprawie strony lub postu.

Bardziej zaawansowany przykład można znaleźć w tym artykule: Building a Better Sitemap.xml with Jekyll.

2

Natknąłem się na to, ponieważ moja strona jest hostowana na stronach github. Wygląda na to, że strony github teraz to obsługują.

prostu musiałem dodać do _config.yml:

gems: 
    - jekyll-sitemap 

(Opcjonalnie można dodać do Gemfile, ale kopalnia została już uwzględniona poprzez uzależnienie)

(Fakt zabawa: Jekyll przekierowanie-z jest również obsługiwany przez strony github)

+2

Jeśli ktoś inny natknie się na to, upewnij się, że nie masz żadnych zakładek przed wpisaniem w "- jekyll-sitemap", Jekyll nie zbuduje w ten sposób. Dodałem go wcześniej do mojego Gemfile, ale nie do mojego _config.yml i nie wygenerowałem mapy witryny. – matrixanomaly

+0

Nie zdawałem sobie również sprawy, że muszę w pełni zregenerować witrynę, aby plik sitemap.xml został wyświetlony w folderze _site. – evan