Grav SubDirectory (Alt Klasör) Multisite Kullanımı

Grav Nedir? Nasıl Kurulur? ve DigitalOcean Ubuntu Üzerine Nginx Grav Kurulumu ardından ihtiyaç duyulabileceğini düşündüğüm bir diğer konu olarak (WordPress µ‘dan aşina olabilirsiniz) tek Grav kurulumu üzerinden çoklu site yayınından bahsedeceğim.

AA

Grav kurulumunuzu yaptığınızı varsayıyor ve buna göre ilerliyorum. Öncelikle belirtmekte fayda var, çoklu site yayınını aşağıdaki şekillerde gerçekleştirebilirsiniz.

  • subdomain http://subdomain.ornekwebsitesi.com
  • subdirectory http://ornekwebsitesi.com/subdirectory/

Grav SubDirectory Multisite Kullanımı

Ben bu yazıda şimdilik subdirectory yapılandırmasına değineceğim. Grav‘ın çoklu site yayını WordPress’e göre biraz farklı. Subdomain ya da subdirectory olması fark etmeksizin site tanımlandırmaları user/sites/ yolu üzerinden sağlanmakta. Örneğin site1 adında bir altsite oluşturmak istiyoruz, bu durumda user/sites/ altında site1 adında bir klasör oluşturmalı ve bu klasör içeriğine ilgili sitede kullacağımız tema, eklenti ve ayarlarını oluşturmalıyız.

İlerledikçe süreç daha da netleşecektir. Grav kurulumumuzu çoklu site amacıyla yürüteceğimizden haberdar etmeliyiz. Bu amaçla grav kurulumunun olduğu temel dizinde setup.php adında bir dosya oluşturacağız. Örneğin, DigitalOcean Ubuntu Üzerine Nginx Grav Kurulumu başlıklı yazıda biz kurulumlarımızı ~/www/html/grav yolunda gerçekleştirmiştik. Dolayısıyla setup.php dosyamız bu nedenle ~/www/html/grav/setup.php yoluna sahip olacaktır. SSH üzerinden siteye bağlandığımızı varsayalım (FTP ile de elbette aynı işlemleri gerçekleştirebilirsiniz) ve setup.php dosyamızı oluşturalım.

cd ~/www/html/grav
nano setup.php

Açılacak olan boş PHP dosyasına aşağıdaki satırları ekleyip dosyayı kaydedin ve dosyayı kapatın1.

/**
 * Multisite setup for sub-directories or path based
 * URLs for subsites.
 *
 * DO NOT EDIT UNLESS YOU KNOW WHAT YOU ARE DOING!
 */

use Grav\Common\Filesystem\Folder;

// Get relative path from Grav root.
$path = isset($_SERVER['PATH_INFO'])
   ? $_SERVER['PATH_INFO']
   : Folder::getRelativePath($_SERVER['REQUEST_URI'], ROOT_DIR);

// Extract name of subsite from path
$name = Folder::shift($path);
$folder = "sites/{$name}";
$prefix = "/{$name}";

if (!$name || !is_dir(ROOT_DIR . "user/{$folder}")) {
    return [];
}

// Prefix all pages with the name of the subsite
$container['pages']->base($prefix);

return [
    'environment' => $name,
    'streams' => [
        'schemes' => [
            'user' => [
               'type' => 'ReadOnlyStream',
               'prefixes' => [
                   '' => ["user/{$folder}"],
               ]
            ]
        ]
    ]
];

Yukarıdaki işlemlerin ardından, bir üst paragrafta belirttiğim gibi admin eklentisi de kullanılabilir2. Bu nedenle site1, site2 vb. girişlerde ilk olarak kullanıcı oluşturma ekranını görebilirsiniz. WordPress kurulumunda veritabanı üzerinden kullanıcıların site erişimleri yapılandırılabilmekteyken Grav için siteler için ayrı ayrı erişim ve login süreçleri söz konusu olacaktır.