Интеграция Zend Framework и Geeklog - PullRequest
0 голосов
/ 24 декабря 2009

У нас есть сайт, управляемый geeklog и работающий на

http://bhaa.ie

Недавно мы настроили приложение Zend на поддомене, который управляет этой страницей

http://bhaa.ie/members/public/index.php/event/list

Мы надеемся лучше интегрировать два домена, чтобы мы могли назвать этот URL

http://bhaa.ie/event/list

и zend обрабатывает запрос, а geeklog обрабатывает все остальные запросы.

На мой взгляд, у нас есть 2 варианта

1: Обновите файл .htaccess, чтобы отфильтровать запросы URL между экземплярами geeklog и zend. или же 2. Обновите geeklog index.php, включив в него базовый код Zend

Мне просто интересно, есть ли у кого-нибудь такой опыт, или можно порекомендовать, по какому пути идти?

Ответы [ 2 ]

1 голос
/ 24 декабря 2009

Если у вас есть только пара URL в приложении на основе ZF (то есть event/list и только пара других) , я бы выбрал ваше первое решение: добавьте пару RewriteRules в файл .htaccess веб-сайта geeklog для перенаправления определенных URL-адресов в приложение на основе ZF.

Таким образом, ваши два приложения остаются совершенно разрозненными: у вас нет кода, который смешивается между этими двумя приложениями - как подразумевает ваше второе решение.

0 голосов
/ 09 февраля 2010

GeekLog позволяет вам включить внешнюю страницу, но вам нужно вызвать пользовательский метод geeklog в Zend по умолчанию ./public/index.php.

В приведенном ниже примере мне нужно было

  1. Включить библиотеку php geeklog в set_include_path ()
  2. Вызовите метод EXP_externalAccess () перед вызовом приложения Zend.

Полный код для /public/index.php:

<?php

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    realpath(APPLICATION_PATH),
    '/home/bhaa1/public_html/lib-common.php',
    get_include_path()
)));

/** Zend_Application */
require_once '/home/bhaa1/public_html/lib-common.php';

$page_name = substr($_SERVER['SCRIPT_NAME'], 1);

if (!EXP_externalAccess($page_name)) {
    $display = COM_siteHeader('menu');
    $display .= COM_startBlock($LANG_EX00['access_denied']);
    $display .= '<div align="center"><b>' . 
                $LANG_EX00['access_msg'] . 
                '</b></div>';
    $display .= COM_endBlock();
    $display .= COM_siteFooter(yes);
    echo $display;
    exit;
}

require_once 'Zend/Application.php';  

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV, 
    APPLICATION_PATH . '/configs/dashboard.ini'
);

$application->bootstrap()->run();
?>

Это гарантирует, что страница будет вызываться только при наличии у пользователя правильных разрешений.

Последний шаг - обновить файл layout.phtml, чтобы в меню geek-log 'menu' и 'footer' помещался HTML-код, представленный приложением zend.

<?php echo COM_siteHeader('menu');?>

// .. ZEND LAYOUT STUFF

<?php echo COM_siteHeader('end');?>
...