Mit Yii und Zend einen WordPress Post erzeugen
Hier hab ich erklärt, wie man generell mit Zend_XmlRpc einen WordPress Post erzeugt.
In diesem Beitrag bauen wir uns ein kleines Tool mit dem Yii-Framework, welches mit Hilfe der Zend Komponenten einen Blogeintrag erzeugt. Wir brauchen ein Formular, welches wir mit Yii bauen und eine Action, welche das Formular verarbeitet. zusätzlich wollen wir das Formular noch durch einen Login schützen. Das Ganze ist wirklich nicht viel Arbeit, wie hoffentlich gleich zu sehen sein wird.
Der Weg ist folgender:
- per yiic eine WebApplication erzeugen
- das Formular Model erstellen
- das Formular anzeigen
- das Formular verarbeiten
Ok, ich hab das Erstellen der Applikation mal ge-outsourced, dieses Wissen könnte bereits vorhanden sein, es ist ja nur ein einfacher Befehl auf der Konsole.
Im Ordner protected/models legen wir nun eine Datei mit dem Namen TestForm.php an mit folgendem Inhalt:
class TestForm extends CFormModel { public $title; public $description; public function rules() { return array( array('title, description', 'required') ); } }
Im Ordner protected/views nun eine Datei namens test.php
<div class="yiiForm">
<?php echo CHtml::beginForm(); ?>
<?php echo CHtml::errorSummary($form); ?>
<div class="simple">
<?php echo CHtml::activeLabel($form,'title'); ?>
<?php echo CHtml::activeTextField($form,'title'); ?>
</div>
<div class="simple">
<?php echo CHtml::activeLabel($form,'description'); ?>
<?php echo CHtml::activeTextArea($form,'description',array('rows'=>6, 'cols'=>50)); ?>
</div>
<div class="action">
<?php echo CHtml::submitButton('Submit'); ?>
</div>
<?php echo CHtml::endForm(); ?>
</div>Und in der Datei protected/controllers/Sitecontroller.php fügen wir eine zusätzliche Action ein:
public function actionTest() { $form = new TestForm(); if(isset($_POST['TestForm'])) { $form->attributes=$_POST['TestForm']; if($form->validate()) { Yii::import('application.vendors.*'); require_once 'Zend/XmlRpc/Client.php'; $client = new Zend_XmlRpc_Client('http://blog.mbischof.de/xmlrpc.php'); $username = 'username'; $password = 'password'; $content = array( 'title' => $form->title, 'description' => $form->description ); $result = $client->call('metaWeblog.newPost', array( 1, $username, $password, $content, true )); } } $this->render("test", array("form" => $form)); }
Die entsprechenden Zend Framework-Klassen müssen sich hierbei im Verzeichnis protected/vendors befinden.
Damit wir das ganze noch mit einem Login absichern, brauchen wir noch folgenden Code im Sitecontroller.
public function filters() { return array( 'accessControl', ); } public function accessRules() { return array( array('allow', 'actions'=>array('login','contact','index'), 'users'=>array('*')), array('allow', 'users'=>array('@')), array('deny', 'users'=>array('*')) ); }
Und so rufen wir das Ganze nun im Browser auf:
index.php?r=site/test
Fertig!
No related posts.
bei mir funktioniert das einbinden leider nicht.
der Inhalt des Libraries Ordner aus dem ZEND release liegt bei mir im Ordner Zend im ordner vendors.
Dennoch meldet yii mir:
require_once(Zend/XmlRpc/Client.php) [function.require-once]: failed to open stream: No such file or directory