2010-05-13 36 views
9

Bây giờ tôi cần tạo một trang Kohana 3 có một blog Wordpress.Làm thế nào để tích hợp Wordpress vào Kohana 3

Tôi đã thấy Kerkness 'Kohana For Wordpress, nhưng dường như điều này ngược lại với những gì tôi muốn.

Dưới đây là các tùy chọn Tôi đã nghĩ đến việc

  • Phong cách mẫu mã giống y như các trang web Kohana (tốn thời gian, không khô và có thể không hoạt động)
  • Bao gồm các blog trong một iframe (xấu xí tất cả địa ngục)
  • cURL các trang Wordpress. Điều này tất nhiên có nghĩa là tôi sẽ cần tạo các lớp giữa đăng nhận xét, v.v., có vẻ như quá nhiều việc.

Có cách nào để tôi có thể đưa blog Wordpress vào trong ứng dụng Kohana hiện có không? Bạn có đề nghị nào không?

Tôi tìm thấy this post detailing the Kohana for Wordpress plugin, nhưng tôi vẫn còn nhầm lẫn về cách hoạt động của nó.

Có nghĩa là từ bên trong Wordpress, tôi có thể gọi bộ điều khiển Kohana không? Điều này có hữu ích cho tôi trong tình huống của tôi không?

+0

Hi alex, bạn có thể xin vui lòng kiểm tra này SO câu hỏi http://stackoverflow.com/questions/20934551/access-data-from-kohana- to-wordpress có liên quan đến truy cập dữ liệu ứng dụng kohana trong wordpress.Thanks – user2681579

Trả lời

4

Tôi đã thực sự sử dụng wordpress cho CMS của trang web trình kích hoạt mã. Đây là phương pháp tôi sử dụng để kéo nội dung trang, chứ không phải nội dung blog, nhưng có thể bạn có thể thay đổi nó một chút để phù hợp với nhu cầu của bạn.

Trong front controller của tôi, tôi thêm vào các tập tin tiêu đề wordpress

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

Điều này cho phép bạn truy cập vào 2 chức năng bạn sẽ cần

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

Để có được dữ liệu trang

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

Nếu bạn gặp lỗi này:

Fatal error: Only variables can be passed by reference…

Bạn phải làm điều đó như thế này

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

vì một bug trong một số phiên bản của php

Sau đó, trong giao diện

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

Hope this helps


EDIT


Tôi đã cài đặt wordpress tại/blog trong hệ thống tệp. Vì vậy, wordpress thực sự chạy như một blog bình thường. Tôi chỉ sử dụng phương pháp này để lấy các trang

+0

Cảm ơn Galen, tuy nhiên tôi đã giải quyết phần này của nó (các trang). Tôi đã tự hỏi nếu tôi có thể làm một cái gì đó tương tự cho nội dung blog quá. – alex

+0

đã cập nhật câu trả lời của tôi – Galen

+0

Cảm ơn bạn, vậy bạn có hướng người dùng đến/blog khi họ muốn xem blog không? Liệu nó có sử dụng CI tại bất kỳ thời điểm nào khi hiển thị blog không? Tôi muốn duy trì cùng một tiêu đề và chức năng của ứng dụng Kohana của tôi, vì vậy tôi không muốn trỏ đến một cài đặt Wordpress, mà là có được nội dung của Wordpress xuất hiện từ bên trong một trong các khung nhìn của tôi. – alex

3

Điều này sẽ cực kỳ khó khăn, vì cách WordPress hoạt động. Cụ thể, nó sử dụng các biến toàn cầu trên khắp nơi, và bởi vì Kohana là phạm vi, bạn sẽ không thể truy cập các biến đó.

Ngắn câu chuyện ngắn: những gì bạn muốn gần như không thể. Tuy nhiên, nếu bạn nhận được nó làm việc (mà không hack WP), tôi sẽ thực sự quan tâm để xem cách bạn đã làm nó.

+0

Cảm ơn, tôi nghĩ rằng nó có thể là khó khăn. Thời gian qua tôi đã thử nó (với blog cá nhân của tôi) Tôi đã viết toàn bộ kết thúc trước trong Kohana 2.3. Nếu tôi làm cho nó hoạt động, tôi sẽ cho bạn biết. – alex

+0

bạn có thể vui lòng kiểm tra câu hỏi SO này http://stackoverflow.com/questions/20934551/access-data-from-kohana-to-wordpress và hướng dẫn tôi. – user2681579

0

Tôi luôn nghĩ điều này sẽ tương đối dễ dàng. Đó là, để sử dụng WordPress làm back-end của trang web của bạn (cho phần blog, ít nhất) và sử dụng Kohana để phục vụ các bài đăng và trang. Nếu tôi không nhầm, tất cả những gì bạn cần làm là thiết lập các mô hình của bạn (bài đăng, nhận xét, trang) để thu thập dữ liệu của họ từ cơ sở dữ liệu WordPress (có hoặc không có ORM) thay vì một mô hình mới.

+0

Đây là cách dễ dàng để làm điều đó (mà tôi đã làm cho blog của riêng tôi). Nhưng bạn cần tạo trình bao bọc cho bất kỳ chức năng nào (chẳng hạn như đăng nhận xét chẳng hạn). – alex

8

Ồ, tôi đã làm điều này từ lâu rồi (trên thực tế vào cuối năm ngoái).

Giả

  1. Bạn đang sử dụng Permalinks Wordpress với mod_rewrite hoặc một lựa chọn tương tự.
  2. Bạn chưa bật register_globals(). Tắt nó đi để đảm bảo các biến toàn cầu của Wordpress không bị Kohana loại bỏ.

Đổi tên

Trước tiên, bạn cần phải đổi tên __() chức năng trong Kohana. Giả sử, bạn đổi tên thành __t(). Bạn sẽ cần phải thay thế nó ở mọi nơi nó xuất hiện, nếu bạn sử dụng một trình soạn thảo như Netbeans có thể tìm thấy tập quán của một hàm hoặc phương thức khá dễ dàng.

Hierarchy

Quyết định tiếp theo bạn cần làm là cho dù bạn muốn tải Wordpress bên Kohana hoặc Kohana bên Wordpress. Tôi thích cái thứ hai, mà tôi đang ghi lại dưới đây. Tôi có thể ghi lại tài liệu sau nếu bạn muốn đi tuyến đường đó.

Tôi đặt thư mục kohana vào thư mục chủ đề của mình.

Trong file functions.php của bạn về chủ đề của bạn, chỉ cần

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

Kohana Cấu hình

tập tin index.php Kohana của bạn cũng cần một số công việc. Loại bỏ các dòng tìm install.php vì chúng sẽ tải ABSPATH . WPINC . 'install.php' thay vào đó và hiển thị thông báo lỗi trong quản trị wordpress của bạn. Bạn cũng cần phải thay đổi error_reporting tại thời điểm Wordpress thất bại E_STRICT.

Bạn sẽ rất có thể cần phải loại bỏ một vài dòng cuối cùng của bootstrap của bạn (trong Kohana) mà xử lý yêu cầu, và thay đổi init của bạn:

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

Trong cả hai tập tin functions.php Wordpress của bạn hoặc trong bootstrap, thêm những dòng này:

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

nơi Application là một lớp học mà bạn chọn.

Mã của tôi cho lớp Application (không có định nghĩa lớp) là:

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; 
} 

cho phép Wordpress làm nó chuyển hướng cho bất kỳ trang nào có thể đã di chuyển ví dụ /about/calendar to /calendar miễn là bạn không có về bộ điều khiểnlịch hành động được xác định.

Vì vậy, bạn có nó. Bất kỳ url nào không được xác định trong Wordpress sẽ rơi vào bộ điều khiển đã xác định của bạn (hoặc sử dụng mẫu 404 của chủ đề của bạn).

bổ sung

này không bắt buộc, nhưng bạn có thể đặt header.php của chủ đề của bạn dưới Kohana bạn xem thư mục (ứng dụng hoặc trong một mô-đun) và từ bất kỳ các tập tin chủ đề của bạn

echo View::factory('header') 

Bạn có thể làm điều tương tự với chân trang của bạn (hoặc bất kỳ tệp nào khác cho vấn đề đó). Trong header.php của bạn, bạn cũng có thể làm điều này:

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

Bằng cách đó bạn có thể trong điều khiển của bạn

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

Để giữ url phù hợp, bạn có thể phải cởi/từ ngày kết thúc Permalinks wordpress nên /% năm% /% monthnum% /% ngày% /% postname%/ trở thành /% năm% /% monthnum% /% ngày% /% postname%, vv


Vui lòng cho tôi biết nếu bạn cần thêm bất kỳ trợ giúp nào để tích hợp Wordpress và Kohana.

+0

+1 điều này thật tuyệt vời! Cảm ơn nhiều. Tôi đã bỏ qua Kohana cho dự án và sử dụng WordPress một mình, và tôi đã học được rất nhiều cách WordPress hoạt động (và một số mã hóa có vấn đề ...). Tôi chắc chắn sẽ xem xét điều này nếu tôi quyết định sử dụng các dự án này cùng nhau trong tương lai. – alex

+0

Cảm ơn. Chúc may mắn với dự án của bạn. – Zahymaka

+0

Tôi đang sử dụng wordpress forum trong ứng dụng kohana của tôi.I đang giữ cơ sở dữ liệu ứng dụng kohana và cơ sở dữ liệu wordpress trong instance.I riêng biệt muốn tạo một mục cơ sở dữ liệu trong cơ sở dữ liệu wordpress, trong khi thêm một người dùng mới vào ứng dụng kohana.Is nó có thể với câu trả lời sau Nếu có thể, bạn có thể đưa ra một số ý tưởng. – user2681579

1

Một giải pháp khác là giữ cho cả hai cài đặt Wordpress và Kohana hoàn toàn riêng biệt. Sau đó, bạn tạo một chủ đề Wordpress tùy chỉnh sẽ kéo đầu trang và chân trang từ Kohana (bạn có thể tạo bộ điều khiển Kohana cho điều đó).

Khi bạn có đầu trang và chân trang, blog sẽ được tích hợp vào trang web của bạn ngay cả khi nó vẫn là cài đặt hoàn toàn riêng biệt. Ưu điểm là không có gì để hack vào Wordpress hoặc Kohana để nó hoạt động.

Có một số chi tiết về phương pháp này trong bài viết trên blog này: Integrating Wordpress into a Kohana application

+0

Chính xác những gì tôi đang tìm kiếm. Cảm ơn anh bạn! –

Các vấn đề liên quan