代码之家  ›  专栏  ›  技术社区  ›  emeraldjava

集成zend框架和geeklog

  •  0
  • emeraldjava  · 技术社区  · 16 年前

    我们有一个geeklog管理的站点

    http://bhaa.ie

    我们最近在管理此页的子域上设置了一个zend应用程序

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

    我们希望更好地集成这两个域,这样我们就可以调用这个url

    http://bhaa.ie/event/list

    让zend处理请求,而geeklog处理所有其他请求。

    在我看来-我们有两个选择

    1:更新.htaccess文件以筛选geeklog和zend实例之间的url请求。 或 2:更新geeklog index.php以包含基本zend代码

    我只是想知道有没有人有这样做的经验,或者可以建议遵循哪条道路?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Pascal MARTIN    16 年前

    如果在基于zf的应用程序中只有几个url (即 event/list 只有几个) ,我将使用您的第一个解决方案:在geeklog网站的.htaccess文件中添加一些重写规则,将特定的url重定向到基于zf的应用程序。

    这样,您的两个应用程序就保持了完全的分离:您没有在两个应用程序之间混合的任何代码——就像您的第二个解决方案所暗示的那样。

        2
  •  0
  •   emeraldjava    16 年前

    geeklog允许您启用外部页面,但您需要在默认zend./public/index.php中调用geeklog自定义方法。

    在下面的例子中,我不得不

    1. 将geeklog php库包含在set_include_path()中
    2. 在调用zend应用程序之前调用exp_externalaccess()方法。

    '/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,让极客日志“menu”和“footer”包装zend应用程序呈现的html。

    <?php echo COM_siteHeader('menu');?>
    
    // .. ZEND LAYOUT STUFF
    
    <?php echo COM_siteHeader('end');?>
    
    推荐文章