Приложение Symfony 2 с Wordpress как CMS
Я хотел бы создать приложение sf2 и поддерживать весь контент (категории, статьи, страницы, медиа и т.д.) в WordPress с интернационализацией (плагин wpml). Приложение будет иметь собственный администратор и управлять содержимым, которое пользователь будет входить в бэкэнд WordPress.
Мой план состоит в том, чтобы иметь контроллер sf2, поддерживаемый системой маршрутизации, и дать ему первый шанс определить маршрут и выполнить его. Если это не так, тогда пусть WordPress обрабатывает рендеринг страницы.
Я также думаю, что мне нужно будет вытащить контент WordPress на некоторые страницы sf2, такие как домашняя страница, где я могу поместить новейшие статьи вместе с содержимым sf2.
Кто-нибудь когда-либо делал это раньше? За и против? Предложения о том, как реализовать это?
Спасибо!
Ответы
Ответ 1
Посмотрите на эти два проекта, которые приближаются к интеграции Symfony-WordPress под разными углами:
Ответ 2
Есть несколько пакетов Sf2, которые помогают немного закрыть пробел, например https://github.com/kayue/KayueWordpressBundle, где вы можете использовать объекты Symfony2 для получения данных Wordpress, аутентифицироваться в Wordpress, использовать функции Wordpress в Twig, подобные вещи. Возможно, вы можете с этим справиться.
Я сделал это в недавнем проекте, и он работал очень хорошо.
Чтобы сделать эту работу, вам нужно иметь две отдельные базы данных и два менеджера сущностей (один для вашего приложения sf2, один для Wordpress) - по крайней мере, то, как он работал лучше всего для меня, имея реальное приложение sf2 с одной стороны и используя Wordpress на стороне для обработки динамических страниц.
Вот пример моей конфигурации:
//app/config.yml
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
cms:
driver: "%database_driver_cms%"
host: "%database_host_cms%"
port: "%database_port_cms%"
dbname: "%database_name_cms%"
user: "%database_user_cms%"
password: "%database_password_cms%"
charset: UTF8
orm:
auto_generate_proxy_classes: %kernel.debug%
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
MyFirstBundle: ~
MySecondBundle: ~ #if you have more than one bundle in your application
cms:
connection: cms
mappings:
KayueWordpressBundle: ~
И конфигурация KayueWordpressBundle:
//app/config.yml
kayue_wordpress:
# Site URL must match *EXACTLY* with WordPress setting. Can be found
# on the Settings > General screen, there are field named "WordPress Address"
site_url: %blog_url%
#Note : I put the site_url in my parameters.yml to get this working on all my environments (see comment below)
# Logged in key and salt. Can be found in the wp-config.php file.
logged_in_key: 'samethingasinyourwpconfig'
logged_in_salt: 'samethingasinyourwpconfig'
# Optional: WordPress cookie path / domain settings.
cookie_path: '/'
cookie_domain: null
# Optional: Custom table prefix. Default is "wp_".
table_prefix: 'wp_'
# Optional: Entity manager configuration to use (cache etc). Default is 'default'.
entity_manager: 'cms' #here is where i put the name of my new entity manager defined above
Используя KayueWordpressBundle, теперь я могу получить доступ ко всем элементам моего Wordpress, используя диспетчер сущностей "cms". Используя меню Wordpress, мы смогли сделать наше приложение меню динамически интегрировать новые страницы, которые были добавлены к ним. Мы также смогли сохранить один и тот же верхний и нижний колонтитулы на нашем Wordpress с помощью завитка, поэтому все это было практически без проблем.
С практической стороны:
Я установил Wordpress в файл, расположенный в корневом каталоге моего проекта. Это означает, что я могу использовать с ним Git, развертывать его с помощью Capifony и т.д.
Обратите внимание, что дизайн, плагины и прочее необходимо добавить/отредактировать в локальной среде, а затем перенести в репозиторий Git перед развертыванием с помощью Capifony. Однако динамический контент вашего Wordpress (страницы, статьи) зависит от вашей базы данных, поэтому окончательный контент должен быть написан только в рабочей среде.
Ответ 3
Прежде всего, чтобы интегрировать Wordpress с Symfony 2, вам придется придумать план "клей", поскольку Wordpress не следует стандарты совместимости, а затем Symfony 2 и другие структуры для достижения этого уровня легкой интеграции.
Во-вторых, было бы здорово, если бы вы могли проверить Symfony CMF, которая в основном представляет собой реализацию структуры управления контентом, которая позволяет создавать собственные CMS поверх компонентов Symfony 2.
Третья и последняя точка будет заключаться в том, что эта интеграция, которую вы пытаетесь достичь, не имеет большого смысла. Первая часть ваших требований, когда вам нужен простой слой поверх Wordpress для обработки входящих запросов, может быть решена с помощью простого взлома кода переднего контроллера Wordpress.