- Twig Templating: Symphony’ ninde kullandığı tema motoru.
- Markdown: Metinden HTML’ ye dönüştürme aracı.
- YAML: Konfigürasyon düzenlemeleri için.
- Parsedown: Markdown ve Markdown Extra özellikler için.
- Doctrine Cache: Performans için.
- Pimple Dependency Injection Container: Genişletilebilirlik ve bakım kolaylığı için.
- Symfony Event Dispatcher: Plugin etkileşimleri için.
- Symfony Console: CLI arayüzü için
- Gregwar Image Library: Görsel düzenleme kütüphanesi.
- Diğer içerik yönetim sistemleri gibi, içerik yönetimini yazılımcının mantığı ile yapmaz.
- Sadece mevcut en iyi yazılımları, uygun şekilde konuşturur.
- Sayfaların, karmaşık veri tabanı tablo ilişkileri yerine hiyerarşik bir ağaç yapısında olması, daha anlaşılır hale getirir.
- Eklentilerde, veritabanında ekstra anlaşılmaz tablolar açmaz, Controller yoksa sadece template klasöründe twig uzantılı dosya ekler.
- Her işi değil, işimize yarayanı en iyi şekilde yapar.
- Web Sunucusu, Apache, Nginx, LiteSpeed, Lightly, IIS, vb.
- Betik Dili, PHP 7.1.3 veya üstü
- Veri Tabanı, Gerekli bir veritabanı yok, Grav, içeriğiniz için düz metin dosyalarını kullanır...
Grav veya Grav+Admin paketini indirin.
ZIP dosyasını web sunucunuzun webroot’ una çıkarın,
örn. ~/webroot/grav
Grav, indirip çalıştığını göstermek için yukarıda anlatılan şekilde de kurulabildiğinden bahseder, fakat bu şekilde kurulumda bağımlı olduğu paketleri kurmak daha zahmetli olacaktır.
PHP uygulamalarında composer tercih edilmesi uygun olacaktır.
#cd ~/webroot
#git clone -b master https://github.com/getgrav/grav.git
#cd ~/webroot/grav
#composer install --no-dev -o
#cd ~/webroot/grav
#bin/grav install
/usr/local/etc/nginx/nginx.conf, sadece root dizini olarak grav kurduğunuz dizini gösterin ve subdomainlerin cname lerini grav sunucuna yönlendirin, gerisini grav halleder...
user www;
http {
…
server {
root /usr/local/www/grav;
…
/user/sites/site-adi/accounts Kullanıcı hesap dosyaları(.yaml)
/user/sites/site-adi/config Site için konfigürasyon dosyaları(.yaml)
/user/sites/site-adi/plugins -> /user/plugins klasörüne link
/user/sites/site-adi/pages Site için web sayfası dosyaları(.md), resim, video vb.
/user/plugins Eklentiler.
/user/themes Temalar.
Tüm sitelerde hesaplar /user/sites/site-adi/accounts dizininde saklanmakta, tüm sitelerde kullanılacak hesaplar link olarak eklenir ise, tek bir yerden değiştirildiğinde tüm siteler için değişecektir.
/user/sites/site-adi/accounts/admin.yaml -> /user/accounts/admin.yaml
/user/sites/site-adi/accounts/ceviri.yaml -> /user/accounts/ceviri.yaml
Web sitesi için içerik sayfaları ağaç yapısı
/user
└── /sites
└── /site-adi
└── /pages
├── /01.home
├── /02.akademik
│ ├── /akademik-birimler
│ ├── /akademik-personel
│ └── /akademik-takvim
├── /03.etkinlikler
│ ├── /etkinlik1
│ └── /etkinlik2
├── /04.hakkimizda
└── /resim-galerisi
- Dosya adı, Markdown biçimli bir dosya olduğunu belirtmek için .md ile bitmelidir. Örn. default.md
- Dosyanın adı, kullanılacak temanın şablon dosyasının adını gösterir. Örn. /user/themes/tema-adi/templates/default.html.twig
Ana şablon dosyası için standart ad 'default' tur, dolayısıyla dosya /user/pages/site-adi/pages/01.home/default.md olarak adlandırılır.
---
title: Page Title
publish_date: 01/23/2019 13:00
published: false
---
# Page Title
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque porttitor eu.
--- marker çifti, sayfa için temel YAML ayarlarından oluşur.
Sonraki içerik, Markdown olarak yazılan, sitenizde derlenip HTML olarak işlenecek gerçek içeriktir.
HTML
<p>Geçerli <a href="https://tr.wikipedia.org/wiki/HTML">HTML</a>
yazmak için, sözdizimi kurallarını doğru kullanmanız gerekir.
Bazı durumlarda ise belli kelimeleri kolayca <strong>bold</strong>
yapmak ve belli kelimeleri de <em>italik</em> yapmak istersiniz
sadece. Ya da bir liste oluşturmak:</p>
<ul>
<li>Kolay olmalı</li>
<li>Zor olmamalı</li>
</ul>
Markdown
Geçerli [HTML](https://tr.wikipedia.org/wiki/HTML)
yazmak için, sözdizimi kurallarını doğru kullanmanız gerekir.
Bazı durumlarda ise belli kelimeleri kolayca **bold**
yapmak ve belli kelimeleri de *italik* yapmak istersiniz
sadece. Ya da bir liste oluşturmak:
- Kolay olmalı
- Zor olmamalı
user/config/system.yaml
languages:
supported:
- tr
- en
Her sayfa bir markdown dosyası ile temsil edilir, örneğin default.md
Çok dilli desteği etkinleştirdiğinizde, Grav uygun şekilde adlandırılmış markdown dosyasını arayacaktır.
Örneğin, Türkçe varsayılan dilimizdir, önce default.tr.md‘ yi arayacaktır. Bu dosya bulunamazsa, bir sonraki dili deneyecek ve default.en.md dosyasını arayacaktır, bu dosya bulunmazsa, Grav varsayılanına geri döner ve sayfa hakkında bilgi sağlamak için default.md dosyasını arar.
URL üzerinden Etkin Dil Türkçe olarak varsayılan dildir, tarayıcınızı bir dil belirtmeden işaret etseydiniz, içeriği default.tr.md dosyasında açıklandığı şekilde alırsınız, ancak tarayıcınızı şu adrese yönlendirerek de açıkça Türkçe' yi isteyebilirsiniz.
Dizin isimlerinide çevirebilirsiniz...
Örneğin, http://yoursite.com/hakkimizda dizininde default.en.md dosyasında yaml alanına
---
slug: about
---
yazılırsa, http://yoursite.com/en/about çalışacaktır...
Temanın dil dosyasını(/user/themes/fakulte/languages.yaml) kullanın, eklentiler dil dosyasında yapılan değişiklikler güncellenince kaybolacaktır.
/user/themes/fakulte/languages.yaml
en:
EVENT_CALANDER: Event Calender
VIDEO_GALLERY: Video Gallery
LINKS: Links
CONTACT: Contact
...
tr:
EVENT_CALANDER: Etkinlik Takvimi
VIDEO_GALLERY: Video Galerisi
LINKS: Bağlantılar
CONTACT: İletişim
...
ar:
EVENT_CALANDER: تقويم الأحداث
VIDEO_GALLERY: معرض الفيديو
LINKS: الروابط
CONTACT: اتصالات
...
Twig kulanımı
{{ t("VIDEO_GALLERY") }}
---
content:
items: '@self.children'
order:
by: date
dir: desc
limit: 10
pagination: true
---
{% for p in page.collection %}
<h2>{{ p.title }}</h2>
{{ p.summary }}
{% endfor %}
<h3 class="title">{{ t("BLOG.ITEM.IMAGE_GALLERIES") }}</h3>
<div class="row page-row">
{% set _page = page.find('/galeri/resimler') %}
{% for __page in _page.children.order('date', 'desc') %}
<div class="row page-row">
{% set _image = __page.media.images|first %}
<div class="col-md-12 col-sm-12 col-xs-12 text-center">
<div class="album-cover" style="min-height: inherit;">
<a title="{{ __page.title }}" href="{{ __page.url }}">
<img class="img-responsive img-thumbnail" src="{{ _image.url }}" alt="" />
</a>
<div class="desc" style="padding: 0px;">
<h4><small><a href="{{ __page.url }}">{{ __page.title }}</a></small></h4>
</div>
</div>
</div>
</div>
{% endfor %}
bin/gpm install devtools
bin/plugin devtools new-theme
blueprints.yaml Grav tarafından temanız hakkında bilgi almak için kullanılan yapılandırma dosyası.
my-theme.yaml Eklentinin kullanabileceği seçenekleri belirlemek için kullanılan eklentidir.
templates/ Sayfalarınızı oluşturmak için Twig şablonlarını içeren bir klasör.
templates/partials/ Twig şablonlarının için include edilebilen web sayfaları
.
├── CHANGELOG.md
├── LICENSE
├── README.md
├── blueprints.yaml
├── fonts
├── my-theme.php
├── my-theme.yaml
├── screenshot.jpg
├── templates
│ ├── default.html.twig
│ ├── menu.html.twig
│ └── partials
│ ├── base.html.twig
│ └── header.html.twig
└── thumbnail.jpg
templates/default.html.twig
{% embed 'partials/base.html.twig' %}
{% block content %}
<div class="content container">
<div class="page-wrapper">
{% include 'partials/breadcrumb.html.twig' %}
<div class="page-content">
<div class="row page-row">
<div class="news-wrapper">
<p>{{ page.content }}</p> </div><!--//news-wrapper-->
{% include 'partials/newsEvents.html.twig' %}
</div><!--//page-row-->
</div><!--//page-content-->
</div><!--//page-->
</div><!--//content-->
{% endblock %}
{% endembed %}
templates/partials/base.html.twig
<!DOCTYPE html>
<head>
{% set _page = page.find('/home') %}
<title>{{ _page.header.birim_adi }}</title>
</head>
<body class="home-page">
<div class="wrapper">
<!-- ******HEADER****** -->
{% include 'partials/header.html.twig' %}
<!-- ******NAV****** -->
{% include 'partials/mainMenu.html.twig' %}
<!-- ******CONTENT****** -->
{% block content %}{% endblock %}
</div><!--//wrapper-->
<!-- ******FOOTER****** -->
{% include 'partials/footer.html.twig' %}
</body>
</html>
home.tr.md
---
title: Anasayfa
birim_adi: 'Eğitim Fakültesi'
mod: 1
theme: default
streetAddress: 'Ondokuz Mayıs Üniversitesi <br> Eğitim Fakültesi'
region: 'Kurupelit Kampüsü'
postalCode: '55200 Atakum, Samsun'
telephone: '+90 362 312 1919 - 5300'
fax: '+90 362 457 6078'
email: [email protected]
twitter: 'https://twitter.com/omurektorluk'
facebook: 'https://www.facebook.com/ondokuzmayis1975?ref=hl'
youtube: 'http://www.youtube.com/user/OMUVideo?feature=watch'
topMenu:
-
title: Anasayfa
url: /
-
title: İletişim
url: /iletisim
---
user/plugins/admin/blueprints/admin/pages/new_announcement.yaml
title: Announcement
form:
fields:
section:
type: section
title: ADD_ANNOUNCEMENT
title:
type: text
label: PLUGIN_ADMIN.PAGE_TITLE
validate:
required: true
folder:
type: hidden
default: '@slugify-title'
route:
type: hidden
default: '/haberler'
name:
type: hidden
default: 'announcement'
visible:
type: hidden
default: ''
blueprint:
type: blueprint
#cd ~/webroot/grav
#bin/grav Temel Grav İşlemleri
#bin/gmp Grav paket Yönetici işlemleri (Grav Package Manager)
Log viewer
#bin/grav logviewer
Eklenti güncelleme
#bin/gpm update
Grav güncelleme
bin/gpm selfupgrade
#composer require chrisullyott/csv-to-grav
cp -R /usr/local/www/grav/user/sites/sablon.omu.edu.tr/pages/* ${dizin}pages/
<?
fwrite($myfile, "title_field,date_field,html_field,author_field,dizin,icerikdizin,sablon\n");
foreach( $json->d as $haber) {
$txt = trim(str_replace(",", " ", $haber->annoTitle)) .',"'. trim(str_replace(",", " ", $haber->annoDate)) .'",'. $string = trim(str_replace(",", " ", preg_replace('/\s+/', ' ', $haber->AnnoContent)))
.",root," .$fakulte. "2.omu.edu.tr/,haberler/" .sprintf('%02d.', ++$i).$haber->annoSeolink. ",announcement.tr\n" ;
fwrite($myfile, $txt);
}
covert.php
<?
$conversion->setColumnMap(array(
'title' => 'title_field',
'date' => 'date_field',
'html' => 'html_field',
'author' => 'author_field',
'dizin‘ => 'dizin',
'icerikdizin'=> 'icerikdizin',
'sablon‘ => 'sablon'
));
$count = $conversion->build();