Kirby Learnings: Part 3

08.11.2023 08:00 Uhr

Useragent mit im Like-Hash

$visitor = md5('v-' . kirby()->visitor()->ip() . kirby()->visitor()->userAgent() );

Hat den Vorteil, dass mehrere Personen aus einem Hashalt (mit der gleichen IP-Nummer) den gleichen Artikel liken können. Ich hab dazu einen Fork des Originalplugins von Medienbäcker erstellt und ihn gefragt ob das so passt für ihn. Er hat angeboten, dass wir die Idee mit in den Masterbranch übernehmen, wow, find ich geil. Würde das aber wenn, optional einbinden wollen, also so dass der Entwickler in der Config entscheiden kann ob er den Useragent mit in den Hash einbezieht. Das klappt hier bei mir schon soweit. Ins Repository hole ich das später noch.

In dem Zusammenhang dann Folgendes gelernt:

Werte aus der Config nutzen

Config:

'assbach.likes' => [
        'useragent' => true, #put useragent/browser in hash    
    ],

Plugin:

if( option('assbach.likes.useragent', false) === true ) { ... }

edit: Maurices Tipp aus den Kommentaren hier übernommen, Danke.

Stats im Panel

Stats

Ich wollte gern die Summe aller Likes im Panel angezeigt bekommen und hab mir lange einen abgebrochen. Am Ende hab ich es über ne Collection gelöst, die direkt den Wert übergibt.

Collection "all-likes-count":

return function ($site) {
    return  count($site->find('blog')->children()->listed()->pluck('likes',";"));
};

Blueprint:

sections:
      stats:
        type: stats        
        size: huge
        reports:
          - label: Likes
            value: "{{ kirby.collection('all-likes-count') }}" 
            theme: positive
          - label: Bilder
            value: "{{ site.index.images.count }}"
          - label: Artikel
            value: "{{ site.find('blog').children.count }}" 
            link: https://assbach.de/panel/pages/blog
          - label: Songs
            value: "{{ site.index.audio.count }}" 
            link: https://assbach.de/assbach-singt            

In einem Template sähe das so aus:

<?= $kirby->collection("all-likes-count");  ?> 

Einige Sachen aus dieser Anleitung hab ich im Panel nicht ans Laufen bekommen, siehe weiter unten.

Speichern und Aktualisieren von Felder in einer Page

$page = $page->update(
[
    'likes' => $page->likes()->value() . $visitor . ';',
    'pageLikeCount' => $pageLikeCount
]);

Siehe auch Docs.

Page Models

in den Docs.
Wollte ich eigentlich für die Likes im Panel nutzen, wie oben erwähnt, hat aber nicht funktioniert. In Page-Templates allerdings schon, hier ein paar Beispiele:

site/models/blogindex.php

<?php

class BlogindexPage extends Page {
  public function modelval() {
    return "this comes from a model";
  }
}

?>

site/templates/blogindex.php

from model: <?= $page->modelval();

mit Übergabe eines einfache Arrays

class BlogindexPage extends Page
{
  public function modelValues(): array
  {
    return [
      'label' => 'Revenue',
      'value' => 326
    ];
  }
}

im template

dump( $page->modelValues() );

from model: <?= $page->modelValues()['label']; ?>

mit Übergabe eines mehrdimensionalen Arrays:


class BlogindexPage extends Page
{
  public function modelValues(): array
  {
    return [
      [
        'label' => 'Revenue',
        'value' => 456
      ],
      [
        'label' => 'Orders',
        'value' => 123
      ],
    ];
  }
}
from model: <?= $page->modelValues()[0]['value']; ?>

Loop:

foreach($page->modelValues() as $mv) {
  echo $mv["label"].": ". $mv["value"]."<br>";
}

— Sascha

Letzte Änderung: 28.04.2024 15:19 Uhr
teilen mit Elk
Sascha
von
Antworten, Likes, Boosts.
« Vorheriger Artikel Nächster Artikel »

© 2024 assbach.de · Private Website von Sascha Aßbach. Umgesetzt mit Kirby 4 · RSS-Feed

Freiberufliches, Design, Webdevelopment bei assbach.com