Kohana 3 içine Wordpress nasıl entegre

5 Cevap php

Ben şimdi bir Kohana 3 site Wordpress blog var olmak gerekir.

Ben 'Kohana For Wordpress Kerkness gördüm, ama ne istediğinizi tam tersi gibi görünüyor.

İşte ben düşündüm seçenekleri

  • Tam Kohana sitesi gibi bakmak için bir stil şablonu (, zaman alıcı olmayan KURU ve çalışmayabilir)
  • Bir iframe içindeki blog (tüm cehennem gibi çirkin) içerir
  • in Wordpress sayfalarında cURL Bu tabii ki çok iş gibi geliyor, hangi vb, yorum gönderme arasındaki katmanları oluşturmak için ihtiyacınız olacak demektir.

Varolan Kohana uygulama içinde bir Wordpress blog dahil herhangi bir yolu var mı? Eğer herhangi bir öneriniz var mı?

I this post detailing the Kohana for Wordpress plugin buldum, ama ben hala nasıl çalıştığını olarak karıştı.

Bu Wordpress içinde demek, ben bir Kohana denetleyicisi arayabilirim? Bu benim durumda benim için yararlı mı?

5 Cevap

Oh, I (aslında geçen yıl sonuna doğru) uzun zaman önce yaptım.

Assumptions

  1. Sen mod_rewrite'ı veya benzer bir seçeneği ile Wordpress kalıcı bağlantı kullanıyor.
  2. Sen register_globals yok () döndü. Wordpress global değişkenler Kohana tarafından kaldırıldı alamadım sağlamak için onu kapatın.

Renaming

İlk olarak, Kohana yılında __() fonksiyonu yeniden adlandırmak gerekir. Eğer __t() olarak adlandırın, söyle. Eğer bir işlev veya yöntem kullanımları bulabilirsiniz Netbeans gibi bir editör kullanıyorsanız oldukça kolay olan, her yerde görünür değiştirmek gerekiyordu.

Hierarchy

Yapmanız gereken bir sonraki karar Wordpress içinde Kohana veya Kohana içinde Wordpress yüklemek isteyip istemediğinizi olduğunu. Ben aşağıda belgeleyen ediyorum sonuncusunu tercih. Eğer bu yolu gitmek için tercih ediyorum eğer ben ikinci belge olabilir.

Benim tema dizininde Kohana dizini koymak.

Temanızın functions.php dosyasına, sadece

include TEMPLATEPATH . '/kohana/index.php';

Kohana Configuration

Sizin Kohana en index.php dosyası da biraz çalışma gerektiriyor. Bunun yerine ABSPATH . WPINC . 'install.php' yüklemek ve wordpress admin bir hata mesajı verir gibi İnstall.php bakmak satırları kaldırın. Ayrıca Wordpress E_STRICT başarısız an olarak error_reporting değiştirmek gerekir.

Çok büyük olasılıkla isteği işlemek (Kohana içinde) bootstrap son birkaç satır kaldırmak ve init değiştirmeniz gerekir:

Kohana::init(array(
    'base_url'   => get_bloginfo('home') . '/',
    'index_file'   => '',
));

Ya da Wordpress functions.php dosyası veya bootstrap olarak, şu satırları ekleyin:

remove_filter('template_redirect', 'redirect_canonical');
add_filter('template_redirect', 'Application::redirect_canonical');

Application sizin seçtiğiniz bir sınıf olduğu.

(Sınıf tanımı olmadan) Application sınıf için benim kod:

public static function redirect_canonical($requested_url=null, $do_redirect=true)
{
    if (is_404() && self::test_url())
    {
        echo Request::instance()->execute()->send_headers()->response;
        exit;
    }

    redirect_canonical($requested_url, $do_redirect);
}

public static function test_url($url = NULL)
{
    if ($url === NULL)
    {
        $url = str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']);

        $url = trim($url, '/');
    }

    foreach (Route::all() as $route)
    {
        /* @var $route Route */
        if ($params = $route->matches($url))
        {
            $controller = 'controller_';

            if (isset($params['directory']))
            {
                // Controllers are in a sub-directory
                $controller .= strtolower(str_replace('/', '_', $params['directory'])).'_';
            }

            // Store the controller
            $controller .= $params['controller'];

            $action = Route::$default_action;

            if (isset($params['action']))
            {
                $action = $params['action'];
            }

            if (!class_exists($controller))
                return false;
            if (!(method_exists($controller, 'action_' . $action) || method_exists($controller, '__call')))
                return false;
            return true;
        }
    }

    return false;
}

Wordpress sağlar ki bu örneğin taşınmış olabilir herhangi bir sayfa için yönlendirme var yok /about/calendar için /calendar sürece bir about denetleyicisi ve calendar eylemi tanımlanmış yok gibi.

Yani orada o var. Wordpress içinde tanımlanan hiçbir adresler tanımlı kontrolöre düşmek (veya temanın 404 şablonu kullanın) olacaktır.

Additional

Bu gerekli değildir, ancak Kohana Defa klasörü altında (bir uygulama veya modül) ve tema dosyaları herhangi temanızın header.php koyabilirsiniz

echo View::factory('header')

Siz (ya da bu konuda herhangi bir diğer dosyaları) ve altbilgi ile aynı şeyi yapabilirdi. Senin header.php, ayrıca bu yapabilirdi:

if (isset($title)) echo $title; else wp_title(YOUR_OPTIONS);

Eğer denetleyicisi olabilir bu şekilde

echo View::factory('header')->set('title', 'YOUR_TITLE');

Tutarlı adresler tutmak için, Wordpress ucundan / çıkarmak zorunda kalabilirsiniz /%year%/%monthnum%/%day%/%postname%/ olur /%year%/%monthnum%/%day%/%postname%, vb permalinks


Eğer Wordpress ve Kohana entegre daha fazla yardıma ihtiyacınız olursa lütfen bana bildirin.

Ben aslında bir kodu ateşleyici sitenin CMS için wordpress kullandım. Bu i, sayfa içeriği çekmek içeriğini blog değil, ama belki sizin ihtiyaçlarınıza uygun bir onu biraz değiştirmek için kullanılan bir yöntemdir.

Benim ön denetleyicisi ben wordpress başlık dosyası eklendi

require('/path/to/wp-blog-header.php');

Bu size ihtiyacınız olacak 2 işlevlerine erişim sağlar

get_page()  – Get the page data from the database
wpautop() – Automatically add paragraph tags to page content

Sayfa verilerini almak için

$page_data = get_page( 4 ); // Where 4 is the page ID in wordpress

Eğer bu hatayı alırsanız:

Fatal error: Only variables can be passed by reference…

Bunu böyle yapmak zorunda

$page_id = 4;
$page_data = get_page( $page_id );

çünkü bug php bazı sürümlerinde arasında

Sonra görünümünde

<?= wpautop($page_data->post_content) ?>

Hope this helps


EDIT


Ben dosya sistemi içinde blog / de wordpress kurulu. Yani aslında wordpress normal bir blog olarak çalışır. Ben sadece sayfaları kapmak için bu yöntemi kullanın

Bunun nedeni WordPress çalışır şekilde, son derece zor olacak. Özellikle, her yerde global değişkenler kullanır ve Kohana kapsamlı olduğu için, bu değişkenleri erişmek mümkün olmayacaktır.

Uzun lafın kısası: ne istediğinizi neredeyse imkansız. Eğer (WP hack olmadan) çalışma alırsanız Ancak, ben bunu nasıl yaptığını görmek gerçekten ilgi olacaktır.

Ben her zaman bu nispeten kolay olacağını düşündüm. Bu (en azından blog bölümü için) sitenizin back-end olarak WordPress kullanımı ve mesajları ve sayfaları sunmak için Kohana kullanmak için olduğunu. Ben karıştırıyorsun değilim, yapmanız gerekir her yerine yeni birinin (veya ORM olmadan) WordPress veritabanından kendi veri toplamak için modeller (sonrası, açıklama, sayfa) kurulur.

Başka bir çözüm tamamen ayrı Wordpress ve Kohana hem kurulumları tutmaktır. Sonra Kohana (bunun için bir Kohana denetleyicisi oluşturabilirsiniz) gelen üstbilgi ve altbilgi çekecek özel bir Wordpress tema oluşturmak.

Eğer başlık var ve altbilgi kez, blog yine tamamen ayrı bir kurulum olsa bile web sitenize entegre görünüyor. Avantajı çalışma almak için Wordpress veya Kohana birine kesmek için bir şey var olmasıdır.

Bu yöntem hakkında bazı ayrıntılar bu blog yazısı var: Integrating Wordpress into a Kohana application