Tag: php

0

Being able to extend classes is the key to powerful programming. PHP provides you all the tools you need to obtain rich and extendible classes. But sometimes you find yourself using the wrong tool.. Look at this very simple class:

class Post {
    const TABLE = 'posts';
    const TYPE = 'post';

    static public function all() {
        $select = "SELECT * FROM `%s` WHERE `type` = '%s'\n";
        echo sprintf($select, self::TABLE, self::TYPE);
    }
}

Post::all();
// SELECT * FROM `posts` WHERE `type` = 'post'

Look at the class constants TABLE and TYPE and you can almost feel what our next subclass will look like, and how minimalistic it will be:

class Comment extends Post {
    const TYPE = 'comment';
}

Comment::all();
// SELECT * FROM `posts` WHERE `type` = 'post'
// ^ is not what we meant...

Though the intentions are good, the result is unwanted: we want to select all from posts where type is ‘comment’, not ‘post’.
That is the blame for using ‘self’ to obtain the class constants. ‘self’ Refers to current class it is defined in, which is not the inherited class. But we don’t want to rewrite all the methods – that misses the point of all this. Using ‘static public $TABLE’ as property is an option, but why not use class constants now that PHP provides them.

A lot of people use ‘self’ to refer to class constants or static methods, but as soon as you start inheriting such class (often classes are coded without the intention to inherit them at some stage), this issue comes up.

We will have to use ‘late static binding’ in stead of ‘self’, simply by using ‘static’, which is computed using runtime information. Now take a look at the next example:

class Post {
    const TABLE = 'posts';
    const TYPE = 'post';

    static public function all() {
        $select = "SELECT * FROM `%s` WHERE `type` = '%s'\n";
        echo sprintf($select, static::TABLE, static::TYPE);
    }
}

Post::all();
// SELECT * FROM `posts` WHERE `type` = 'post'


class Comment extends Post {
    const TYPE = 'comment';
}

Comment::all();
// SELECT * FROM `posts` WHERE `type` = 'comment'
// ^ now that's just what we want

Now we’re selecting all from posts where type is ‘comment’!
And if you explicitly want to call the class you inherited from (perhaps in a constructor for doing some logics) you use ‘parent’ in stead, as here on the ‘save’-method:

class Post {
    static public function create() {
        return new static();
    }
    public function save() {
        echo "Inserts into the `posts` table\n";
    }
}

class Chat extends Post {
    public function save() {
        parent::save();
        echo "Inserts into the `post_recipient` table\n";
    }
}

Chat::create()->save();
// Inserts into the `posts` table
// Inserts into the `post_recipient` table
0

WooCommerce has an awful lot of hooks! Very useful if you want to customize a webshop without touching the WooCommerce core – so you’re safe when updating it. Check out the availability in the documentation!

Here’s an example:
In some occasions you want to do something extra with the WooCommerce checkout form. This could either be adding some HTML, or a while Javascript file just for this occasion, or something completely different.
You can use ‘woocommerce_after_checkout_form’ or ‘woocommerce_before_checkout_form’ from your plugin or (child-)theme.

function add_scripts_checkout() {
    wp_enqueue_script(
        'checkout-script',
        get_stylesheet_directory_uri() . '/includes/js/checkout.js',
        array( 'jquery' )
    );
}
function add_html_checkout(){
    $img_src = get_stylesheet_directory_uri() . '/img/certified-something.png'
    echo '<img src="'.$img_src.'"';
    echo ' class="certified-something">';
}

add_action( 'woocommerce_before_checkout_form', 'add_html_checkout' );
add_action( 'woocommerce_after_checkout_form', 'add_scripts_checkout');

As you can see, you can either output HTML straight away by echo’ing right before / after the markup of the checkout-form, or handle things programatically like enqueing a javascript file. This Javascript file will only be loaded wherever there’s a WooCommerce checkout-form present, and thus you can target those checkout forms directly with your Javascript functionality.

0

Dette efterår har sejKo fået lavet en række udvidelser til Mega Journal.

Mega Journal er et udbredt journal system, som sejKo har special udviklet til den selvejet institution Kvadderkjær, for ti år siden 🙂
Systemet bliver en gang i mellem udvidet med nye features og forbedringer, som opstår efter aktuelle behov.

Kvadderkjær - Mega Journal

0

Sidste uge havde sejKo Jonathan Klainberger i praktik.
Det er hårdt men hyggeligt at være praktikant her; først skulle den 15 årige Jonathan følge sejKos programmering lynkursus (med Kaj & Andrea eksempler!) så vises der basics af HTML & CSS (og sikke en funky sider der kom ud af det!), så afsluttes fredagen med et opbygning at et simpelt skyde-spil i Javascript – og en Kaj kage selvfølgelig 🙂
Tak for besøget Jonathan!

0

Sparthy.dk har en del store Joomla! versioner på banen. Det startede i 2009 med Joomla! 1.5, i 2011 kom den store konvertering til Joomla! 1.7 som fortsat i Joomla! 2.5 indtil 2015, hvor vi opgraderede hjemmesiden til den nye Joomla! 3.

I kort har den nye Joomla! fået en mere intuitivt brugerflade i administrationen og byder bl.a. på flere artikel-specifikke egenskaber.

Konverteringen var ikke så omfattende som da vi skiftede fra v1.5, men dog kræver en opdatering fra Joomla! v2 til v3 lidt kompatibilitetsarbejde: Alle MooTools scripts skulle skrives om til jQuery, nogle extensions skulle erstattes andre skrives lidt om. Også templaten som stammer helt fra 2009 (designet fik lille tidstilpasning i 2011 ellers holder det stadig) skulle tilpasses for bestemte extensions.
Da Joomla! 3 kan lade udvikleren tildele en artikel forskellige egenskaber, har vi valgt at droppe den tidligere brugte K2 extension til fordele for Joomlas ‘native’ artikler, og vi konverterede tusindevis af artikler. Det har gjort hjemmesiden hurtigere og sikret os mod eventuelle kompatibilitets problemer i fremtiden.

Brugerne kan ikke se den store opdatering udefra, men det kan administratorerne bag siden og websitet er helt up-to-date!

0

Starfish kontorfælle Susanne Ringgaard Pedersen (SRP Consulting) er jurist og arbejder en ofte som konsulent for United Nations Office of the High Commissioner for Human Rights (du ved; FN, som i Forenede Nationer…).
Efter nytår kom hun hjem fra Geneve, med en hasteopgave til hendes kontorfæller i Klitmøller 🙂 En sag skulle afsluttes her og nu og i den forbindelse havde FN brug for at omdanne rådata til en søgbar database.
SejKo udviklede en brugerflade for søgning i data, og Incendium stod for en lukket adgang til systemet fra Geneve – alt data er ‘strictly confidential’.
Tre Starfish firmaer, med vidt forskellige kompetencer, med én fælles opgave – til FN!

FN SLMM

0

Det har været en fornøjelse at få Sparekassen Kronjyllands nye design implementeret på det helt nye Joomla! platform, nemlig Joomla! 3.
I kort har den nye Joomla! fået en mere intuitivt brugerflade i administrationen og byder bl.a. på flere artikel-specifikke egenskaber.

Sparekassen Kronjylland Joomla3

SejKo har implementeret de 6 forskellige sidedesigns, udviklet flere moduler, som bl.a. på en dynamisk måde kan håndtere modulens størrelse, ikon, (baggrunds)farve, tekst, link, knap mv.

Sparkron backend

Websitet er responsive så kan nemt kan tilgås på mobiler og tablets.

Se sparkron.dk

Sejkos samarbejdspartner Rough (fra Berlin) har trådt til for at hjælpe i denne store arbejdsbyrde.

0

SejKo har udarbejdet en Joomla! component for Sparekassen Thys hjemmesiden, som håndterer garantafstemning og tilmelding garantmøder.

Sparekassen Thy - Garantafstemning

0

Mega Journal er et udbredt journal system, som sejKo har special udviklet til institutionerne Kvadderkjær og Station Vest.
Dette år er der blevet udviklet diverse nye moduler til systemet. Den mest væsentlige for medarbejdere, af disse udvidelser er Fokusområder: Her sættes mål for det enkelte barn af en administrator-bruger, som en medarbejder i journalen kan følge op på hvordan de forskellige punkter er gået den dag. Med den historik, kan man hurtig danne sig et blik over barnets udvikling på de fokusområder / mål.

0

En WordPress plugin udviklet for Incendium ApS, som bl.a. er i brug ved Københavnsk Brandvæsen.

Denne plugin rapporterer og dokumenterer incidenter, og egner sig dermed godt for den ‘blue-light sektor’:
Så snart at der er udrykning af Københavnsk brandvæsen, bliver der oprettet en ‘incident’ i systemet, som i første omgang gemmer primære data som begivenhed/årsag, lokation, dato og tid. Efterfølgende bliver indsatslederens live video stream sat ind (endnu et produkt fra Incendium) og evt flere videoer, samt links.
Specielt for videoerne i denne plugin er, at man kan ‘bookmarke’ fragmenter fra videoen, som er guld værd til dokumentation og edukation!