Kategorien
WordPress

WordPress Paragraph Tags werden nicht eingefügt

Man kann sehr einfach über das Problem stolpern, dass die <p>-Tags (Paragrapgh-Tags) nicht automatisch im Blog eingefügt werden.

Um das Problem zu lösen, musste man einfach die Hook vorher ausführen, die die Paragraph Tags setzt:

$content = get_the_content();

echo  apply_filters('the_content', $content);

Dies ergab sich dadurch, dass der Content noch nach iso kodiert werden musste. Ansosnten wäre die Funktion the_content() die richtige Wahl gewesen, die das automatisch erledigt.

Dies is bei mir passiert, bei der Verwendung von WordPress ohne ein Theme sondern nur als Content-Lieferant mittels:

define('WP_USE_THEMES', false);
Kategorien
Yii Framework

Yii AR Search mit Relations Attribute Has_Many

Um eine Suche auch über die Relationen einer Active Record Klasse zu realisieren, muss Folgendes beachtet werden:

1. Die Relation muss vorhanden sein:

 public function relations()
    {
            'categories' => array(self::HAS_MANY, 'place_id', 'category_id'),

2. Die Relation muss suchbar sein:

public function rules()
    {
            array('name, categories', 'safe', 'on' => 'search'),

3. In der Suchfunktion muss folgender Code eingefügt werden. Das OR ist dabei optional aber wichtig, wenn man sich wundert, dass keine Ergebnisse angezeigt werden in der View.

  public function findPlaces($searchTerm)
    {
        $criteria = new CDbCriteria;

        $criteria->compare('name', $this->name, true, 'OR');
        $criteria->with = array('categories' => array("together" => true));
        $criteria->compare('categories.name', $searchTerm,true, 'OR');

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }
Kategorien
WordPress Yii Framework

WordPress Integration in Yii Projekt

Wenn man einen WordPress Blog in das Yii Framework intgrieren will und das Layout der Seite behalten will, bietet WordPress die Möglichkeit, die WordPress API zu benutzen ohne ein Theme erstellen zu müssen.

Der Blog/News Bereich soll unter der Adresse: foo.com/news/ erreichbar sein.

WordPress hochladen

WordPress kann wie gewohnt installiert werden und sollte in der Ordner-Hierachie in folgendes Verzeichnis auf selbr Ebene, wie das Yii-Projekt entpackt werden:

yii-project
  assets
  protected
wordpress

Als Datenbank sollte die selber benutzt werden, wie das Yii-Projekt und alle Worpdress-Tabellen sollten ein Prefix erhalten (standardmäßig „wp_“ in der wp-config).

Nachdem man die wp-config angepasst hat, muss noch das Routing von Yii angepasst werden vor der Installation von WordPress.

Yii Controller anlegen

Kategorien
Yii Framework

Yii Yiic Cronjob Permission Denied

Wer das Yiic-Tool zum Starten von Cronjobs benutzt und sich wundert, warum diese nicht ausgeführt werden, der sollte checken, ob der Cronjob korrekt angegeben ist:

php /var/www/vhosts/foo/bar/protected/yiic updateSomething

Ansonsten gibt es einen Fehler wie:

full_path/protected/yiic: Permission denied
Kategorien
PHP

PHP Simple HTML DOM Parser Fehler beim Crawlen einiger Webseiten

Einige Webseiten konnte ich mit dem genialen Tool PHP Simple HTML DOM Parser nicht crawlen, weilder Inhalt, den die Methode file_get_contents() false zurücklieferte.

Um den Fehler zu fixen, war es lediglich nötig, den Funktionsaufruf zu ersetzen:

$html = file_get_html($myUrl);

durch die Funktion und die Nutzung von Curl mit einem korrektem USER_AGENT Header:

$html = getHtml($myUrl);
   function getHtml($url)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        $str = curl_exec($curl);
        curl_close($curl);

        $html = str_get_html($str);
        return $html;
    }

Curl is dazu noch performanter als file_get_contents().

Bei anderen Fehlern und Problem lohnt sich die sehr gute FAQ Seite des Projektes.

Kategorien
Yii Framework

Die besten Yii-Extensions

Das Yii-Framework zeichnet sich besonders durch seinen eleganten Code und seine Vielzahl an Plugins (Extensions) aus.
Es gibt ein eigenes Extensions-Directory, indem für fast jeden Anwendungsfall eine passende Extension von Usern bereit gestellt wird.

Die besten Yii-Extensions

  1. Yii-Bootstrap: ein Yii-Wrapper für das Front-End Framework Twitter Bootstrap mit einer sehr guten Dokumentation
  2. Yii-User: ein Modul, welches das Login, die Registrierung, die Passwort-Vergessen-Funktion und die User-Profil-Seiten bereit stellt
  3. YiiMailer: HTML-Mail versenden mit PHPMailer, die Yii Views können für das Layout verwendet werden
  4. eclientscript: Minify CSS und Javascript Files
  5. carjson: ein Javascript Mapper für PHP Active Record Klassen

Worauf man achten sollte

Wenn man Extensions verwendet in seinem Projekt, solte man darauf achten, dass die Extension

  • weiter gepflegt wird. Dies kann man daran erkennen, ob es ein „Last updated“-Datum in diesem oder im letzten Jahr gab und sich dieses vom „Created on“-Datum unterscheidet
  • die Bewertungen gut und zahlreich sind
  • eine gute und aktuelle  Dokumentation vorhanden ist
Kategorien
Yii Framework

Integration von Vendor-Bibliotheken in das Yii Framework

Für die Nutzung von Fremd-Bibliotheken wie Facebook for PHP SDK innerhalb des Yii-Frameworks sieht die Ordner-Struktur den Ordner vendors vor in protected/vendors.
Dorthin können in Bibliotheken in einen eigenen Unterordner kopiert werden.
Für die Nutzung der Bibliothek gibt es 2 Möglichkeiten:

Die Einbindung in das Autoloading

Diese hat den Vorteil, dass sich nciht mehr um das Einbinden der Bibliothek bei der Benutzung an verschiedenen Stellen innerhalb der Applikation gekümmert werden muss.
Der Nachteil ist, dass das Autoloading von allen Komponenten länger dauert, weil ein Pfad mehr gescannt werden muss nach der passenden Klasse.
Dazu kann in der config/main.php angepasst werden:

 'import'=>array(
    'application.vendors.facebook.*',
 ),

Direktes Laden bei Benutzung der Bibliothek

Wenn die Bibliothek nur an überschaubaren Zeitpunkten benutzt wird lohnt es sich die Bibliothek zur Laufzeit direkt zu laden mit dem import Befehl:

Yii::import('application.vendors.facebook.facebook);

oder direkt mit

require_once 'vendors/myFacebook/facebook.php';

einzubinden, besonders , wenn Dateiname und Klassenamen nicht übereinstimmen, was eine Konvention des Yii-Frameworks ist.

Kategorien
Yii Framework

Yii Access Controll mit Rollen System

Ein sehr mächtiges Rollensystem für authentifizierteUser bringt Yii von Hause aus mit: CAuthManager.

Damit lassen sich User Rollen abbilden wie z.B.

  1. Redakteure dürfen schreiben und nur Ihre eigenen Posts ändern
  2. Hauptredakteure dürfen alle Posts ändern
  3. Leser dürfen Posts lesen
  4. Admins dürfen alles
  5. unangemeldete User dürfen nichts 🙂

1. Schritt: Installation

Dokumentation: Role-Based Access Control

config/main.php:

'components' => array(
        'authManager'=>array(
            'class'=>'CDbAuthManager',
            'connectionID'=>'db',
        ),
),

Kategorien
PHP XT-Commerce

DHL Retoure Modul in PHP

Die Deutsche Post bietet einen Retouren-Soap Webservice an, mit dem man schnell Retoure-Labels für Pakete erzeugen kann. Mit Hilfe der Klasse lassen diese pdf-Files schnell und einfach holen und anzeigen.

Beispiel-Aufruf:

$dhlRetoure = new DhlRetoure();
$pdf  = $dhlRetoure->getRetourePdf($surname, $familyname, $street, $streetNumber, $zip, $city);
if($pdf){
$dhlRetoure->displayPdf($pdf);
}

Kategorien
PHP

Wie kann man sich XML im Browser lesbar anzeigen lassen mit PHP

Leider wird XML vom Browser meistens „verschluckt“. Dann bleiben nur noch die Daten übrig und der Programmierer kuckt in die Röhre und muss mit Firebug rumeiern.

Wenn man sich das XML eifnach einzeigen lassen will, gibt es folgenden PHP Trick mit der Funktion htmlentities(), die u.a. die „<“ und „>“- Zeichen escapt, und der sehr praktischen eigenen dump() Funktion: