Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu php Kanał ATOM (tag: php)

Autor wpisu: Łukasz Socha, dodany: 03.08.2013 13:59, tagi: php

W drugim wpisie poruszającym tematykę związaną z WordPressem opiszę mechanizm shortcode.

Shortcode – o co chodzi?

Mechanizm shortcode możemy wykorzystać do uproszczenia struktury kodu w edytorze – łatwiej będzie użyć klientowi dostosowany dla niego znacznik niż pisać bezpośrednio w HTMLu :) .

Przykład

Stwórzmy znacznik, który będzie można wykorzystać do cytowania wypowiedzi.

Własny znacznik tworzymy dodając nową funkcję w pliku functions.php:

function my_cite($atts, $content) {
    $output = '<span class="cite" id="'.$atts['id'].'">"'.$content.'"</span>';
    return $output;
}
add_shortcode('cite', 'my_cite');

Gdy chcemy wykorzystać stworzony przez nas znacznik podczas edycji treści dodajemy:

[cite]Cytat[/cite]

Prawda, że łatwiej wyjaśnić klientowi, jak użyć powyższy znacznik niż znaczniki HTML? :) . Więcej o shortcode na stronach WordPressu.

Autor wpisu: Tomasz Kowalczyk, dodany: 01.08.2013 11:46, tagi: php, apache

Witam wszystkich. Dzisiejszy wpis to suma pomysłów na co najmniej trzy artykuły, które przeleżały gdzieś z tyłu głowy przez ostatnie 2 miesiące. Nadal pracuję nad projektami o których wspominałem w poprzednich wpisach, cały czas rozbudowując, optymalizując i stając na głowie, … #LINK#

Autor wpisu: matipl, dodany: 30.07.2013 11:48, tagi: php

PHPCon Poland - logoRuszyły wczesne zapisy na konferencję PHPCon. Tym razem spotkanie odbędzie się w Szczyrku (600km z Gdańska!).

Agenda jest jeszcze w przygotowaniu, ale możecie być pewni, że 25-27 października 2013 pojawią się wyśmienici prelegenci z zagranicy. Organizatorzy jeszcze dopinają te sprawy. Reszta prelegentów z dużym prawdopodobieństwem będzie wybierana jak rok temu – na podstawie głosowania uczestników na zgłoszone prelekcje (nadal można zgłaszać swoje propozycje).

Pomijając kwestię dojazdu gości z północy Polski, reszta punktów jest jak zwykle na duży plus, jak również sam koszt uczestnictwa. Jeśli osoba chętna zarejestruje się i wpłaci pieniądze do 4 sierpnia koszt uczestnictwa wyniesie 220 zł (pobyt od piątku z kolacją, bez obiadu niedzielnego). Dla osób chcących fakturę VAT ten koszt zaczyna się od kwoty 260 zł netto.

Jak tylko pojawią się następne konkrety na pewno Was powiadomię. Postaram się w tym roku nie opuścić PHPCon Poland!

Autor wpisu: Łukasz Socha, dodany: 29.07.2013 11:15, tagi: php

W ostatnim czasie postanowiłem zapoznać się z tworzeniem wtyczek pod WordPressa – stworzenie kilku pluginów przyspieszy i ułatwi codzienną pracę :) . Zaskoczyło mnie lekko to, że w polskim internecie jest mało tutoriali na ten temat (znalazłem raptem dwa), a więc postanowiłem dodać coś od siebie…

Założenia pluginu

Stworzona przez nas wtyczka będzie umożliwiała:

  • skonfigurowanie slidera;
  • dodanie i edycję wyświetlanych obrazków;
  • wyświetlanie slidera;

Założenia już znamy, a co musi zawierać takki plugin?

  • opis pluginu;
  • funkcję instalującą;
  • funkcję usuwającą;
  • funkcję do zmiany konfiguracji;
  • funkcję do dodawania / usuwania obrazków;
  • funkcję wyświetlającą slider na stronie

No to tworzymy…

W teorii wszystko już wiemy. Pora na napisanie kodu :)

Na początek musimy stworzyć folder zawierający plugin oraz główny plik (ważne jest, by główny plik miał taką samą nazwę jak folder), ja go nazwałem wp-logo-carousel-by-racy-mind. Następnie musimy opisać naszą wtyczkę:

<?php
/*
  Plugin Name: WP logo carousel created by Racy Mind
  Version: 0.1
  Description: Plugin adds logo carousel
  Author: Racy Mind
  Author URI: http://www.racymind.pl/
 */

Chyba nie muszę nic tu tłumaczyć :) . Teraz stworzymy funkcję instalującą.

/**
 * Tworzy tabele bazy danych dla pluginu
 * 
 * @global $wpdb
 */
function rmlc_install() {
    global $wpdb;
    $prefix = $wpdb->prefix;
    $rmlc_tablename = $prefix . "rm_logo_carousel";

    $rmlc_db_version = "1.0";

    if ($wpdb->get_var("SHOW TABLES LIKE '" . $rmlc_tablename . "'") != $rmlc_tablename) {
        $query = "CREATE TABLE " . $rmlc_tablename . " ( 
        id int(9) NOT NULL AUTO_INCREMENT, 
        image varchar(250) NOT NULL,  
        link varchar(250) NOT NULL,  
        title varchar(250) NOT NULL, 
        PRIMARY KEY  (id)
        )";

        $wpdb->query($query);

        add_option("rmlc_db_version", $rmlc_db_version);
    }
}

Obiekt $wpdb służy do obsługi bazy danych, na stronach WordPress znajduje się dokumentacja tej klasy. W 8 i 9 linijce pobieramy prefix tabel w bazie danych i przypisujemy do zmiennej nazwę naszej tabeli. W kolejnej linii przypisujemy wersję bazy danych pluginu (może się przydać przy aktualizacjach). W kolejnych wierszach sprawdzamy czy taka tabela już nie istnieje, jeżeli nie, tworzymy ją. Na koniec dodajemy opcję z informacją o wersji bazy danych wtyczki. Funkcja gotowa, musimy jeszcze poinformować WordPress, że funkcja ta ma być uruchamiana podczas aktywacji wtyczki.

register_activation_hook(__FILE__, 'rmlc_install');

Jak mamy funkcję do instalacji to i potrzeba nam do od instalowania…

/**
 * Usuwa tabele bazy danych
 * @global $wpdb $wpdb
 */
function rmlc_uninstall() {
    global $wpdb;
    $prefix = $wpdb->prefix;
    $rmlc_tablename = $prefix . "rm_logo_carousel";
    $query ='DROP TABLE '.$rmlc_tablename;
        $wpdb->query($query);
}
register_deactivation_hook(__FILE__, 'rmlc_uninstall');

Kolejnym krokiem będzie dodanie naszej wtyczki do menu w panelu administracyjnym.

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: nospor, dodany: 25.07.2013 13:40, tagi: php

Niedawno dostałem info o nowy edytorze online NeptunIDE. Co to jest? Wyręczę się informacją prasową: NeptunIDE to polski startup, który tworzy zintegrowane środowisko programistyczne (IDE) dla PHP działające w chmurze. [...] NeptunIDE to środowisko programistyczne, które stawia na szybkość działania, podpowiadanie składni i wsparcie dla frameworka CakePHP. Przeprowadziliśmy ankietę wśród ponad 500 programistów PHP z całego świata. Odpowiedzi były niemal jednomyślne: dla zdecydowanej większości programistów najważniejsze jest jak najbardziej precyzyjne podpowiadanie kodu, w każdym możliwym momencie, a najbardziej denerwującą rzeczą w używanym przez nich oprogramowaniu jest szybkość, zużycie pamięci i responsywność. Oczywiste wiec dla nas było, że na te dwie potrzeby użytkowników musimy postawić tworząc NeptunIDE. Trzecia cecha naszego produktu - specjalne wsparcie dla CakePHP - to nasza własna propozycja.

Autor wpisu: matipl, dodany: 22.07.2013 21:02, tagi: internet, php

OVH - logoTym razem dość krótko. OVH – firma oferująca shared hosting, serwery VPS i dedykowane – właśnie oświadczyło za pomocą swojego systemu, że doszło do włamania do ich wewnętrznej sieci firmowej. W zeszłym tygodniu podobne włamanie miało miejsce do Developer Center firmy Apple (jakaś plaga?).

Niestety dzisiejsza sprawa dotyczy  wszystkich klientów firmy OVH z Europy. To co najważniejsze – wykradziono loginy (NIC) oraz hashe haseł, które przy odpowiednich możliwościach własnych da się złamać. Reszta danych dla większości powinny być bez znaczenia (adresy do faktur, telefon, faks).

Kto z Was ma konto (dostęp do panelu w OVH) niech jak najszybciej zmieni hasło, aby później się nie zdziwił że serwer z aplikacją PHP jest niedostępny.

Informacja od OVH: http://prace.ovh.pl/?do=details&id=16227

Autor wpisu: Athlan, dodany: 18.07.2013 01:41, tagi: php, php.pl, symfony

Context

When you scale a PHP application you have to consider several aspects of runtime environment such us:

  • Bytecode caching (e.x. APC or Zend Optimizer Plus or eAccelerator), more;
  • Reading project files from RAM instead of HDD;
  • Caching and minify static content etc.
  • One additional aspect is storing sessions.

By default, PHP stores sessions in files. There are also several approaches to speed up saving sessions, such us memcached, mapping save_path folder as ramdisc, etc.

In scaling approaches there is important that many worker nodes (with deployed application) runs the same code, round-robin selected or load-ballanced, but have the same space to store sessions, because there is no guarantee in distributes architecture, that next user’s request will be handled by the same node. This implies, that session memory have to be shared between nodes, unfortunately storing these data in local RAM doesn’t meet this requirement.

Redis as PHP Session Handler

One of additional approach to storing sessions in fast-memory is Redis – key-value store. This could be configured as centralized or distributed database.

There is available a Redis session_handler for PHP. To use it:

  1. install Redis first as a service [more]
  2. copy/compile redis.so PHP extension [more information]
  3. register an extension in php.ini configuration file
  4. reconfigure session.save_handler in your php.ini configuration file, or set it directly on runtime by writing for e.x.:
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://localhost:6379');
Redis Session Handler in Symfony 2

I am using Symfony 2 framework. Unfortunately, 4th step don’t affects the application. You have to register own SessionHandler in config.yml file:

framework:
    session:
        handler_id: session_handler_redis

This configuration uses new SessionHandler registered ad session_handler_redis Symfony Service (more).

We have to write own SessionHandler in Symfony. I have found the Redis SessionHandler proposed by Andrej Hudec on GitHub (original code here). I have decided to use and improve existing implementation.

Declare new SessionHandler class somewhere in your project:

&lt;?php
 
namespace Fokus\Webapp\CommonBundle\SessionHandler;
 
use \Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeSessionHandler;
 
/**
 * NativeRedisSessionStorage.
 *
 * Driver for the redis session save hadlers provided by the redis PHP extension.
 *
 * @see https://github.com/nicolasff/phpredis
 *
 * @author Andrej Hudec &lt;pulzarraider@gmail.com&gt;
 * @author Piotr Pelczar &lt;me@athlan.pl&gt;
 */
class NativeRedisSessionHandler extends NativeSessionHandler
{
    /**
     * Constructor.
     *
     * @param string $savePath Path of redis server.
     */
    public function __construct($savePath = "")
    {
        if (!extension_loaded('redis')) {
            throw new \RuntimeException('PHP does not have "redis" session module registered');
        }
 
        if ("" === $savePath) {
            $savePath = ini_get('session.save_path');
        }
 
        if ("" === $savePath) {
            $savePath = "tcp://localhost:6379"; // guess path
        }
 
        ini_set('session.save_handler', 'redis');
        ini_set('session.save_path', $savePath);
    }
}

Now, add the entry that declares the class as a Symfony Service in services.yml file:

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.