Могу ли я интегрировать веб-приложение на основе Zend-Framework в сайт WordPress? - PullRequest
2 голосов
/ 18 декабря 2008

У меня есть проект, в котором я хочу иметь возможность вызывать wp_list_pages () на странице, которая также использует Zend Framework для включения некоторых сложных интерфейсов для управления пользовательскими данными вне wordpress.

Эта страница также должна перенаправлять пользователя на экран входа в WordPress, если он еще не вошел с соответствующим уровнем авторизации.

Как это будет работать на высоком уровне, т.е. нужно ли мне редактировать файл начальной загрузки wordpress для условной реализации пользовательского интерфейса на основе определенного URL или чего-то еще, но при этом включать в себя определенные файлы, чтобы иметь возможность вызывать wp_list_pages () этот пользовательский интерфейс?

Ответы [ 6 ]

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

Я думаю, вы могли бы сделать это, просто импортируйте фреймворк на ту страницу, для которой он вам нужен. Я не знаю, как работает Zend, но проверь пути к тому, где разместить твои каталоги, чтобы Zend нашел их. Как я уже сказал, я думаю, ты мог бы это сделать, просто поэкспериментируй и расскажи нам, как все прошло!

Остерегайтесь конфликтов имен для функций и / или переменных, это не должно быть большой проблемой, исходящей от таких популярных продуктов, как WordPress и Zend ... (которые должны быть теоретически хорошо закодированы)

1 голос
/ 19 декабря 2008

Итак, я создал страницу в Wordpress и пользовательский шаблон для этой страницы, в который я поместил следующий Zend Framework код:

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();

$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'      => 'localhost',
    'username'  => 'username',
    'password'  => 'password',
    'dbname'    => 'dbname'
));
Zend_Db_Table::setDefaultAdapter($db);

class Users extends Zend_Db_Table_Abstract {
    protected $_name = 'wp_users';
}

$users = new Users();
$users = $users->fetchAll()->toArray();

print_r($users[0]['user_login']);

Все это прекрасно работает, так что, очевидно, возможно использовать Zend в сочетании с Wordpress хотя бы в некоторой степени.

Становится очевидным, что проблема в том, кто контролирует перезапись URL , или маршрутизацию, или самозагрузку (не уверен в правильной терминологии). Если бы я поставил конец приведенного выше кода, запустив $ users = new Users ();, в контроллер следующим образом:

class UsersController extends Zend_Controller_Action {
    function getUserAction() {
        $this->_helper->viewRenderer->setNoRender();

        $users = new Users();
        $users = $users->fetchAll()->toArray();

        echo $users[0]['user_login'];
    }
}

Как бы я тогда вызвал эту функцию? Я хотел бы вызвать его из javascript через XHR-запрос в ответ на событие на странице, но запрос URL 'index.php / Users / getUser /' возвращает 'Входной файл не выбран'. Попытка получить доступ к URL http://www.domain.com/Users/getUser/ приводит к появлению страницы Wordpress 404.

Есть ли способ обойти это? Конечно, это относится не только к WordPress - я ожидаю, что оно применимо к любому существующему приложению, которое перезаписывает / направляет запросы через загрузчик.

1 голос
/ 18 декабря 2008

Спасибо, Фернандо.

Я только что прочитал эту ветку , которая предполагает, что вы можете использовать Zend в любом скрипте, просто включив:

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();

Итак, учитывая, что все, что мне нужно для использования Zend, находится на одной странице, могу ли я просто включить этот код в файл пользовательского шаблона, который я назначаю соответствующей странице в навигации? Если бы я использовал javascript для отправки формы через XHR, запрошенный URL-адрес принял бы форму '/ controller / action' - но Zend не знал бы каталог контроллера.

Могу ли я поместить код Zend в загрузчик WordPress, то есть приведенный выше код плюс конфигурацию frontController, а затем использовать Zend везде, где бы то ни было?

1 голос
/ 18 декабря 2008

Я разработал пару плагинов для WordPress и обнаружил, что их действительно легко расширить. Хотя с Зендом не работал.

Вы должны проверить API плагина WordPress. В основном часть о действиях, фильтрах и хуках: http://codex.wordpress.org/Plugin_API

Вы даже можете переопределить некоторые функции (не уверен, что wp_list_pages() можно переопределить).

Это довольно хорошо задокументировано, и за этим стоит большое сообщество разработчиков на IRC, форумах и т. Д.

0 голосов
/ 17 июня 2009

Я создал плагин для WordPress, цель которого аналогична вашей, хотя он более похож на CodeIgniter. Я не очень хорошо знаю Зенд, думаю, это должно помочь:

Создайте файл с именем rout.php в каталоге плагинов со следующим кодом:

add_action( 'init', 'add_custom_urls' );

function add_custom_urls(){
    global $wp, $wp_rewrite;

    $wp_rewrite->add_rule( '(.*)$', 'index.php?&cPath=$matches[1]', 'top' );
    $wp->add_query_var( 'cPath' );
}

Обязательно активируйте оба плагина в вашем админе. Эти два файла позволят вам перехватить URL-адрес, прежде чем Wordpress попытается выяснить, что с ним делать. Вы можете использовать регулярные выражения, чтобы лучше контролировать, какие страницы ловить. Возможно, вам придется удалить запись в вашей таблице _options db, где option_name = 'rewrite_rules', прежде чем это сработает.

Далее создайте еще один плагин со следующим кодом:

add_action( 'template_redirect', 'bootstrap' );

function bootstrap(){
    global $cPath;
    echo( "cPath : $cPath" );
    if( $cPath ){
        dosomethingwith( $cPath ); 
    }
}

Поместите весь ваш код в функцию dosomethingwith (). Вам нужно выяснить, может ли запрошенный URL-адрес сопоставиться с Zend-контроллером и т. Д. http://www.domain.com/Users/getUser/ даст вам $ cPath = Users / getUser / В случае успеха вы также, вероятно, захотите умереть () так что, как только он будет завершен, Wordpress не будет пытаться вступить во владение снова.

0 голосов
/ 18 декабря 2008

Я думаю, вы могли бы сделать это, просто импортируйте фреймворк на ту страницу, для которой он вам нужен. Я не знаю, как работает Zend, но проверь пути к тому, где разместить твои каталоги, чтобы Zend нашел их. Как я сказал Я думаю , ты мог бы сделать это, просто поэкспериментируй и расскажи нам, как все прошло !

Остерегайтесь конфликтов имен для функций и / или переменных, это не должно быть большой проблемой, исходящей от таких популярных продуктов, как WordPress и Zend ... (которые должны быть теоретически хорошо закодированы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...