Shariff_XH

Third Party Plugins to CMSimple - how to install, use and create plugins

Moderator: Tata

olape
Posts: 844
Joined: Fri Mar 13, 2015 8:47 am
Contact:

Re: Shariff_XH

Post by olape » Thu Apr 14, 2016 11:35 am

lck wrote:Beim Testen ist mir aufgefallen, dass bei einer Plugin-Konfiguration: "vertical" + "round" das Info-Symbol rechts floatet anstatt links.
im Stylesheet, Zeile 150

Code: Select all

.round.orientation-vertical .info {
zu

Code: Select all

.round .orientation-vertical .info {
Was so ein Leerzeichen so ausmachen kann. :oops:
lck wrote:Online ist entweder cURL nicht aktiv oder es läuft eine PHP-Version kleiner PHP 5.5.0.
Das sollte in der Übersicht des Plugins (System Check) entsprechend dargestellt sein.
Bei mir läuft es mit PHP 5.5.29, von Heise angegeben ist 5.5.0.
lck wrote:Gibt es dann immer noch bestimmte Vorraussetzungen zur Anzeige des Counters, hinsichtlich der URL oder dergleichen?
Ist mir nicht bekannt.
lck wrote:Wird/sollte der Counter auch angezeigt werden, wenn die Seite noch nicht geteilt wurde, also mit einer "0"?
Ja. Auch meine Testseite ist bei keinem der Dienste geteilt.
http://test.penschke.net/?Test-Print

./plugins/shariff/backend/tmp → writable ???
Einfach mal schauen, ob sich in diesem Ordner was tut?
Wenn der leer bleibt, dann kann auch nichts angezeigt werden.

cmb
Posts: 13211
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Shariff_XH

Post by cmb » Thu Apr 14, 2016 12:39 pm

olape wrote:
lck wrote:Online ist entweder cURL nicht aktiv oder es läuft eine PHP-Version kleiner PHP 5.5.0.
Das sollte in der Übersicht des Plugins (System Check) entsprechend dargestellt sein.
Bei mir läuft es mit PHP 5.5.29, von Heise angegeben ist 5.5.0.
Falls die Übersichtsseite des Plugins nicht angezeigt werden kann, oder Du vor der Installation schon mal nachschauen willst, ob diese Voraussetzungen erfüllt sind, dann kannst Du das unter Einstellungen→Info→PHP-Info machen.

Aber: ist cURL denn wirklich erforderlich?
Christoph M. Becker – Plugins for CMSimple_XH

olape
Posts: 844
Joined: Fri Mar 13, 2015 8:47 am
Contact:

Re: Shariff_XH

Post by olape » Thu Apr 14, 2016 12:52 pm

cmb wrote:Aber: ist cURL denn wirklich erforderlich?
Eigentlich hast du dir die Frage schon mal selbst beantwortet.

http://cmsimpleforum.com/viewtopic.php? ... 289#p52007

Das wäre übrigens eine möglicher Lösungsansatz dafür:
"CURLOPT_SSL_VERIFYPEER" in shariff/backend/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php (Zeile 324) auf "false" zu setzen. --> ungetestet.

bzw. müsste man mal suchen, woher

Code: Select all

$options['verify']
in Zeile 317 und 318 kommt oder kommen müsste.

Wäre natürlich immer einen Versuch wert.

cmb
Posts: 13211
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Shariff_XH

Post by cmb » Thu Apr 14, 2016 1:51 pm

olape wrote:
cmb wrote:Aber: ist cURL denn wirklich erforderlich?
Eigentlich hast du dir die Frage schon mal selbst beantwortet.

http://cmsimpleforum.com/viewtopic.php? ... 289#p52007
Nicht wirklich. Denn das Guzzle-FAQ sagt dazu:
Does Guzzle require cURL?

No. Guzzle can use any HTTP handler to send requests. This means that Guzzle can be used with cURL, PHP's stream wrapper, sockets, and non-blocking libraries like React. You just need to configure an HTTP handler to use a different method of sending requests.
Wie ein anderer Handler verwendet werden kann, ist in der Guzzle-Doku beschrieben. Das müsste dann nur vom Shariff-Backend unterstützt werden (anscheinend müsste Backend.php modifiziert werden).
olape wrote:Das wäre übrigens eine möglicher Lösungsansatz dafür:
"CURLOPT_SSL_VERIFYPEER" in shariff/backend/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php (Zeile 324) auf "false" zu setzen. --> ungetestet.
Das würde ich nicht machen, da man damit einen wichtigen Teil der HTTPS-Sicherheit einfach umgeht.
Christoph M. Becker – Plugins for CMSimple_XH

olape
Posts: 844
Joined: Fri Mar 13, 2015 8:47 am
Contact:

Re: Shariff_XH

Post by olape » Thu Apr 14, 2016 2:07 pm

cmb wrote:Wie ein anderer Handler verwendet werden kann, ist in der Guzzle-Doku beschrieben. Das müsste dann nur vom Shariff-Backend unterstützt werden (anscheinend müsste Backend.php modifiziert werden).
Ich wusste schon, warum ich eigentlich nichts mit dem Backend zu tun haben wollte. :roll:
cmb wrote:Das würde ich nicht machen, da man damit einen wichtigen Teil der HTTPS-Sicherheit einfach umgeht.
Da hast du Recht, aber bei einer lokalen Umgebung wäre es mal einen Versuch wert.
http://docs.guzzlephp.org/en/latest/req ... ify-option
...
// Disable validation entirely (don't do this!).
...

cmb
Posts: 13211
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Shariff_XH

Post by cmb » Thu Apr 14, 2016 4:17 pm

olape wrote:
cmb wrote:Wie ein anderer Handler verwendet werden kann, ist in der Guzzle-Doku beschrieben. Das müsste dann nur vom Shariff-Backend unterstützt werden (anscheinend müsste Backend.php modifiziert werden).
Ich wusste schon, warum ich eigentlich nichts mit dem Backend zu tun haben wollte. :roll:
Verständlich, wenn man die Komplexität des Shariff-Backends bedenkt. Diese Komplexität ist sinnvoll, damit das Backend sehr flexibel verwendet werden kann, und auch auf High-Traffic-Websites genutzt werden kann. Aber auf einer Website mit ein paar Hundert oder weniger Page-Views täglich (so wie das wohl bei CMSimple_XH Websites üblich ist), braucht man weder alternative Caches, geschweige denn alternative Cache-Adapter (z.B. memcache), noch sonst eine der Hochleistungskomponenten. Im Prinzip genügt schon fast folgendes Backend (index.php):

Code: Select all

<?php

header('Content-Type:application/json');

// these should be taken from config.php
$services = array('Facebook', 'LinkedIn', 'Xing', 'GooglePlus');

if (!isset($_GET['url'])) {
    echo '[]';
    exit;
}
$url = $_GET['url'];

$timeout = 5;
$ttl = 300;

$cache = __DIR__ . '/' . md5($url) . '.json';
if (file_exists($cache) && filemtime($cache) >= time() - $ttl) {
    $result = file_get_contents($cache);
} else {
    $result = array();

    if (in_array('Facebook', $services)) {
        $query = urlencode('SELECT total_count FROM link_stat WHERE url="' . $url . '"');
        $query = 'https://graph.facebook.com/fql?q=' . $query;
        $opts = array('http' => array('timeout' => $timeout));
        $context = stream_context_create($opts);
        $response = json_decode(file_get_contents($query, false, $context), true);
        if (isset($response['data'][0]['total_count'])) {
            $result['facebook'] = $response['data'][0]['total_count'];
        }
    }

    if (in_array('LinkedIn', $services)) {
        $query = 'https://www.linkedin.com/countserv/count/share?url=' . urlencode($url) . '&lang=de_DE&format=json';
        $opts = array('http' => array('timeout' => $timeout));
        $context = stream_context_create($opts);
        $response = json_decode(file_get_contents($query, false, $context), true);
        if (isset($response['count'])) {
            $result['linkedin'] = $response['count'];
        }
    }

    if (in_array('Xing', $services)) {
        $query = 'https://www.xing-share.com/spi/shares/statistics?url=' . urlencode($url);
        $opts = array('http' => array('method' => 'POST', 'timeout' => $timeout));
        $context = stream_context_create($opts);
        $response = json_decode(file_get_contents($query, false, $context), true);
        if (isset($response['share_counter'])) {
            $result['xing'] = $response['share_counter'];
        }
    }

    if (in_array('GooglePlus', $services)) {
        $query = 'https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ';
        $json = array(
            'method' => 'pos.plusones.get',
            'id'     => 'p',
            'params' => array(
                'nolog'   => 'true',
                'id'      => $url,
                'source'  => 'widget',
                'userId'  => '@viewer',
                'groupId' => '@self',
            ),
            'jsonrpc'    => '2.0',
            'key'        => 'p',
            'apiVersion' => 'v1',
        );
        $opts = array('http' => array('method' => 'POST', 'header' => 'Content-Type: application/json', 'content' => json_encode($json), 'timeout' => $timeout));
        $context = stream_context_create($opts);
        $response = json_decode(file_get_contents($query, false, $context), true);
        if (isset($response['result']['metadata']['globalCounts']['count'])) {
            $result['googleplus'] = $response['result']['metadata']['globalCounts']['count'];
        }
    }
    $result = json_encode($result);
    file_put_contents($cache, $result);
}
echo $result;
Da sind bisher nur 4 Services überhaupt implementiert (und diese werden nicht durch config.php beeinflusst), die Requests werden synchron gestellt (daher das kurze $timeout), das Caching ist ziemlich primitiv realisiert, und der Code alles andere als clean. Ist also genau das gegenteil des Heise-Backends. Der Hauptvorteil: mehr als 3MB in über 500 Dateien gespart. Außerdem läuft das auch auf älteren PHP-Versionen (die aber nicht zu empfehlen sind). Voraussetzung: allow_url_fopen muss aktiviert sein.

Ich schau mal, dass ich das noch verbessern kann, und prüfe auch noch mal die APIs der Dienst-Anbieter.
Christoph M. Becker – Plugins for CMSimple_XH

olape
Posts: 844
Joined: Fri Mar 13, 2015 8:47 am
Contact:

Re: Shariff_XH

Post by olape » Thu Apr 14, 2016 6:03 pm

allow_url_fopen könnte aber noch viel eher ein Problem werden (deaktiviert sein) als cURL.

Man müsste also trotzdem beide Varianten einbauen.

lck
Posts: 1609
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Shariff_XH

Post by lck » Fri Apr 15, 2016 12:29 pm

Test von Shariff_XH war nun erfolgreich, konnte einen Server finden der die Systemanforderungen für das Plugin erfüllt. Der Couter kam zum Vorschein :)

Folgende Punkte würde ich gerne noch erwähnen:

Bei einer Konfigurutionseinstellung mit standard - vertical - standard
oder per

Code: Select all

{{{op_shariff('standard', 'vertical', 'standard', 'googleplus|facebook|linkedin|mail|info', 'counter');}}}
... floatet das Info-Symbol rechts und ist nur 25px bzw. 35px breit, je nach Viewport.

Das könnte man ändern mit:

Code: Select all

/* stylesheet.css ca. Zelie 630 */
.shariff .orientation-vertical .info {
    /* width: 35px; */
    /* float: right; */
    width: 100%;
    float: none;
}

/* und ca. Zeile 658 */
.shariff .orientation-vertical .info {
    /* width: 25px; */
    width: 100%;
}
 
BTW: Bitte auch gleich die Zeile 27 korrigieren

Code: Select all

ol, ul, li, { /* Das Komma hinter li ist zuviel */
    list-style: none;
}
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

olape
Posts: 844
Joined: Fri Mar 13, 2015 8:47 am
Contact:

Re: Shariff_XH

Post by olape » Fri Apr 15, 2016 12:59 pm

Danke für die Rückmeldung.
(An was lag es denn nun genau, dass es bisher nicht funktioniert hat?)
lck wrote:... floatet das Info-Symbol rechts und ist nur 25px bzw. 35px breit, je nach Viewport.
Das ist original Heise. Am Standardlayout habe ich eigentlich absichtlich nichts geändert.
olape wrote:BTW: Bitte auch gleich die Zeile 27 korrigieren
Das mache ich

cmb
Posts: 13211
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Shariff_XH

Post by cmb » Fri Apr 15, 2016 3:43 pm

olape wrote:
lck wrote:... floatet das Info-Symbol rechts und ist nur 25px bzw. 35px breit, je nach Viewport.
Das ist original Heise. Am Standardlayout habe ich eigentlich absichtlich nichts geändert.
olape wrote:BTW: Bitte auch gleich die Zeile 27 korrigieren
Das mache ich
Sollten diese Korrekturen/Verbesserungen für den allgemeinen Shariff relevant sein, dann würde ich vorschlagen, sie im Github-Repo als Issues zu melden (oder gleichen einen PR zu machen); dann haben auch Nicht-CMSimple_XH Nutzer was davon, und bei späteren Updates muss das nicht immer wieder nachgebessert werden.
Christoph M. Becker – Plugins for CMSimple_XH

Post Reply