web developer Umbria
oop, php, web developer Umbria

PHP e OOP: membri statici e costanti all’ interno di una classe

Articoli precedenti sullo stesso tema OOP in PHP nei portali umbriaway:

https://umbriawayinfo.wordpress.com/2019/04/07/programmazione-procedurale-oppure-oop-this-is-the-problem/

https://umbriawaypotenzia.wordpress.com/2019/04/07/php-versione-sette-introdotte-nuove-direttive-per-trasformare-il-linguaggio-in-fortemente-tipicizzato/

https://umbriawaysemplifica.wordpress.com/2019/04/08/ambito-di-visibilita-delle-variabili-in-php-public-protected-private/

https://umbriawaytarget.wordpress.com/2019/04/08/php-oop-magic-method-e-costruttori/

https://umbriawayvalorizza.wordpress.com/2019/04/08/warning-ambito-di-visibilita-publica-delle-classi-encapsulation-e-sicurezza-metodi-getter-e-setter/

https://umbriawayvendita.wordpress.com/2019/04/09/php-e-oop-magic-method-__autoload-ereditarieta-pianificazione-iniziale-con-uml/

https://umbriawaynoir.wordpress.com/2019/04/09/php-e-oop-overriding-e-polimorfismo/

web developer UmbriaEsiste un legame strettissimo tra le proprietà di una classe e l’istanza di una classe, nel senso che posso diversificare i valori tra le due classi. Posso anche impostare degli atributi specifici nella classe, esattamente come avviene in un ostello quando la cucina o certi locali sono in uso comune. Posso quindi identificare una proprietà o un metodo specifico definindolo in un certo modo con una certa sintassi tenendo presente che tutto quello che accade sulle istanze ha una ripercussione diretta su tutti gli oggetti che hanno quella caratteristica. A livello di comprensione è quello che accade nel procedurale con le variabili globali di PHP, dove tutte le variabili che hanno quella caratteristica subiranno le stesse modifiche in tutte le righe del programma. Sostanzialmente certe tipologie di variabili fanno riferimento alla classe originaria e non all’ istanza che ne scaturisce dall’ utilizzo della parola chiave NEW. Ad esempio all’ interno di una classe contatore potrei avere bisogno di una inizializzazione fissa nell’ istruzione protected static $contatore=0; in quanto il programma ha proprio questa caratteristica che non deve mutare neanche all’ esterno. Ma se volessi modificare da fuori il valore di questa variabile potrei farlo usando la notazione pattern singleton dei due punti che mi faranno accedere. La parola STATIC caratterizza una specificità nella classe, ossia è come se imponesse a tutti quelli che utilizzano la classe genitore o chi istanzia nuove classi che quella variabile ha quel valore che deve rimanere immutabile. Quindi userò una sintassi tipo:

self::$ proprietà oppure $metodo

A questo punto diamo un occhiata alla classe sorgente e quella derivata come si trasforma e come diventa:

/*

file Hits.php

<?php
class Hits {
protected $ip;
protected static $numhits = 0;
public function __construct() {
self::$numhits++;
}
public function totalHits() {
return self::$numhits;
}
public function setIp() {
$this->ip = $_SERVER[‘REMOTE_ADDR’];
$this->saveIp();
}
private function saveIp() {
// salvo dato su database
}
}

file di output index.php:

<?php
require_once “Classi/Hits.php”;
$hit = new Hits();
echo $hit -> totalHits();
echo “<br>”;
$hit = new Hits();
echo $hit -> totalHits();

file Hits1.php

<?php
class Hits {
protected $ip;
protected static $numhits = 0;
public static function increment() {
return self::$numhits++;
}
public function totalHits() {
return self::$numhits;
}
public function setIp() {
$this->ip = $_SERVER[‘REMOTE_ADDR’];
$this->saveIp();
}
private function saveIp() {
// salvo dato su database
}
}

file di lettura index1.php

<?php
require_once “Classi/Hits1.php”;
$hit = new Hits();
echo $hit::increment();
echo “<br>”;
Hits::increment();
echo $hit->totalHits();

*/

Quindi con questi attributi specifici nella classe, abbiamo visto la parola chiave STATIC, definisco una sorta di variabile globale che ha una sua costante appartenenza con la classe originaria. Quel metodo non apparterrà quindi all’ istanza che verrà creata ma sarà una particolarità della classe originale e ci potrò accedere solo usando una sintassi tipo self::$ proprietà oppure $metodo che avrà ripercussioni su tutte le aree del progetto che utilizzano quella proprietà. Non posso manipoalre queste variabili globali con la parola chiave THIS che fa riferimento all’ oggetto corrente, mentre abbiamo detto che una istanza non si porta dietro le caratteristiche esclusive della classe originaria.La parola chiave self fa riferimento alla classe di origine stessa.

Annunci
web marketing umbria
web design Umbria, web marketing Umbria

Un brand vincente? Istruzioni per l’uso!

web marketing umbriaIl personal brand questo sconosciuto. In tempi oscuri di competività totale dove il mercato é aggredito di pescecani famelici pronti a smembrare i competitors in un sol boccone, un brand timido e barcollante difficilmente può sopravvivere a lungo nell’ oceano blu. Figuriamoci a farlo emergere in maniera consistente! Il paradosso poi è quello dell’ eccellenzaa raggiunta: più facciamo corsi e impariamo tecniche di diffusione per veicolare con il nostro messaggio comunicativo e sembra quasi che meno otteniamo risultati, perché ovviamente un conto é l’apprendimento e un altro é il realizzare il come e metterlo in pratica. Del resto come dicono gli esperti oggi non basta più avere la moglie ubriaca, l’uva nella vigna e la botte piena ma serve anche un corollario di dettaglio per raggiungere l’eccellenza che ci costringe anche ad allantonare le volpi che insidiano il nostro raccolto. Velocità, concorrenza, trasformazioni sociali: come fa un professionista a tenere il passo mutando di continuo le sue strategie e il suo ruolo in un campo di gioco che cambia continuamente le sue regole? E’ chiaro che é facile perdere la bussola e non ci si riconosce mentre si lavora per centrare un obiettivo. Tuttavia con una oculata gestione nella fase promozionale possiamo arrivare a farci percepire come capaci, credibili, affidabili nel settore. Il passaparola vecchio stampo non funziona più senza integrare il vecchio con il nuovo. E quindi? Come sfruttare le opportunità aperte dalla crisi? Come rivitalizzare il proprio business? Come diventare sempre più credibili e performanti? Certamente senza capacità relazionali non si va da nessuna parte, ma un professionista deve essere multitasking a 360 gradi e non é facile fare tutto insieme contemporaneamente senza decentrare e delegare, dando per scontato che la direzione resterà definita e anche lo sforzo profuso per andare oltre non subirà variazioni. Il mercato é saturo. Per vendere un prodotto servizio occorre fare breccia su una migliore promozione e avere un mercato di riferimento. La nostra identità deve emergere congruente ed etica. Il personal brand, vendiamo noi stessi trasmettendo un insieme di valori. Dobbweb marketing umbriaiamo posizionarci usando parole chiave , dobbiamo arrivare primi, scavarci una nicchia, farci un nome, dimostrare la nostra competenza, partecipare al mondo social delle condivisioni, metterci in evidenza con autorevolezza e rimanere focalizzato. Nel nostro brand confluiscono i nostri valori e attraverso questi faremo breccia nei nostri clienti per riuscire a fidelizzarli. Le situazioni di disagio spesso aiutano a mettere in piedi delle reazioni innovative, dobbiamo solo annusare e sfruttare queste opportunità. Gestire le relazioni con il cliente non é una impresa da poco. Ci sono sempre delle difficoltà e delle criticità che ci costringono a trovare delle soluzioni non convenzionali. Del resto i compartimenti stagni con cui sbattere il grugno sono tanti durante il tragitto: gestione del personale, gestione delle finanze, commercializzazione prodotto. Essere ciò che si é e diventare ciò che si é capaci di diventare é questo lo scopo della vita ( R L Stevenson), realizzare un percorso compiuto di trasformazione. Un viaggio così richiede ottimismo e propositività. L’atteggiamento mentale positivo influenzerà i nostri pensieri e le nostre azioni, attivando un circolo vizioso e aiutandoci a superare le convinzioni limitanti. Non possiamo risolvere i problemi allo stesso livello che li ha generati. La conoscenza di elementi nuovi rispetto alla concorrenza ci aiuterà a realizzare il “first”. Dobbiamo avere il coraggio di lanciare soluzioni dirompenti, non solo per l’eccentricità di innovare, ma per le necessità pratiche di imprimere una svolta al proprio business con l’azione, senza inutili dispersioni filosofiche. Come dicono gli esperti, le persone che attendono il passaggio della cometa e una congiunzione astrale favorevole prima di agire non agiranno mai. Il professionista di oggi deve lavorare sulla percezione e l’immagine pubblica di se. Cinquanta anni fa bastava uno studio prestigioso, un bel vestito alla moda, un minimo di galanteria e la propria nicchia era automaticamente conquistata. Ma oggi non funziona più, la saturazione rende tutto più complesso: il cliente vuole sapere vita, morte e miracoli dell’ imprenditore con cui entrano in contatto. Distinguersi in mezzo alla concorrenza é importante. Il professionista moderno deve essere superman: dinamicamente deve gestire il tempo e pianificare il futuro con una vision, deve sapersi autovalutare e mettere in discussione quando qualcosa non funziona, deve delegare e inventare, driblare e proporre. Devono sviluppare una visione chiara del domani. Devono proporre trasparenza e visibilità di intenti. Devono mostrare, far vedere, usare anche i media per realizzare video. La genuinità dice la sua, il manierismo barocco crea solo zone di ambiguità. Riposizioniamoci sul brand, ritagliamoci una fetta di mercato specifico per poterci distinguere. Saper fare o conquistare la fiducia di un maggior numero di persone? La seconda che ho detto! La competizione sul mercato e il rapido mutamento dei tempi devono costringerci a inventare situazioni nuove e tempestive. Dobbiamo formarci e migliorare le nostre competenze. Dobbiamo documentarci, cercare nuove soluzioni per problemi nuovi che prima non esistevano. Prendere coscienza del linguaggio é il primo passo. Le parole producono delle reazioni emotive. Dobbiamo stare molto attenti nella nostra comunicazione e suscitare sensazioni positive nell’ interlocutore, proporre una esperienza distensiva e propositiva. Formazione, promozione e gestione sono le chiavi che aprono le porte a un brand di successo. Vedremo nello specifico ognuno di questi cassetti prossimamente. Per ora abbiamo solo introdutto il tema della reputation brand e dato una idea della complessità degli argomenti che si nascondono dietro alla vendita e alla natura di qualsiasi business! Superare la mediocrità cercando nuovi stimoli e nuove motivazioni per raggiungere l’eccellenza é l’obiettivo da perseguire.

chess, king's gambit

Event “CSP Inverno 2018/2019 – Girone 37” – Faraoni Enrico vs Big-Fishy, C30

[Site “Chess.com”]
[White “enricof8”]
[Black “Big-Fishy”]
[Result “1-0”]
[ECO “C30”]
[WhiteElo “1850”]
[BlackElo “1645”]
[EndDate “2019.01.11”]

1.e4 e5 2.f4 Nc6

C30: King’s Gambit Declined: Queen’s Knight Defense

3.Nf3 d6 4.d4!?

4 Ac4 é la più giocata, ma come al solito nel gambetto di re si apre un mondo e si può scegliere tra Ab5/ Cc3/d3/fe5 etc etc

4..Bg4

La più giocata sembra 4..ef4, ma anche 4..ed4 é ok

5.Bb5

oppure anche 5 d5 o 5 c3 per le alternative

5..a6 6.Bxc6+ bxc6 7.O-O

7 de5 é la principale

7…Nf6 NT

la linea secondo chessbase a pagamento continua con 7..ed4, questa mossa di cavallo é una novità logica

8.Nc3 h6?

una grave perdita di tempo, il nero era sotto minaccia, si imponeva 8..ed4 con sostanziale equilibrio

9.dxe5 chiaro vantaggio del bianco

9..dxe5 10.Qxd8+ Rxd8 11.Nxe5 Bc5+ 12.Kh1

12..Rd6? (+1.26 → +2.93) Inaccuracy, meglio 12…Bd7

13.Nd3 vantaggio decisivo

13..Nd7 14.e5

si vince anche con f5, idea Af4 dopo che il nero salva l’Ag4 con f6

14..Rxd3 15.cxd3 O-O 16.h3 Bf5 17.Ne4 Bd4 18.Bd2 Bxb2 19.Rab1 Bd4 20.Rfc1 Bxe4?

(+2.56 → +3.90) Inaccuracy. A better move was 20… c5 21.a4 Tc8 22.g4 Be6 23.Nc3 Bxc3 24.Rxc3 Ba2 25.Rbc1

21.dxe4 c5 22.Rb7 Nb6 23.Rxc7 Ra8 24.g4?

Niente di nuovo sotto il sole, ciascun agonista i propri difetti se li porta dietro, io ho sempre avuto problemi a realizzare il vantaggio nelle posizioni vinte, ricordo dei furti clamorosi subiti anche con giocatori dalle spalline altosonanti. Qui si passa a +6.67 a → +4.73), 24. Tcb1 per raddoppiare in settima 24..Cc4 25 Ac1 g5 26 g3 é normale. Da notare che a una ipotetica rottura con g5 il bianco si priva anche della possibilità di giocare g3

24…Na4 25.Kg2 Nb2 26.Kf3 a5 27.Bc3 Nd3 28.Rc2?

Di nuovo come sopra, il Bianco cerca inconsapevolmente di attivare i pezzi avversari e ci riesce, la caduta del pedone f7 non era stata calcolata ma arriva di circostanza, il che la dice lunga sul livello qualitativo dell’ analisi. Passiamo da un +5.15 a un → +3.57; 28. Rd1 per i puristi della tecnica computerizzata

28…Nb4 29.Bxb4 axb4 30.h4

(+3.37 → +2.13) Inaccuracy. A better move was 30. Ke2

30…Ra3+ 31.Kg2 Re3 32.Rc8+ Kh7 33.Rf8 Rxe4 34.Rxf7 Kg6 35.Rf8 Kh7 36.h5 g6?

(+4.73 → +7.50) Inaccuracy. A better move was 36… g5 37.hxg6+ Kxg6 38.Rf6+ Kg7 39.Kg3 c4 40.Rxc4 Bf2+ 41.Kxf2

37.Rf7+ Kg8 38.hxg6 Kh8 39.Kf1 Kg8 40.Re2 Rxe2

The best move was 40… Be3 41.Ke1 +-

41.Kxe2 c4 42.e6 b3 43.e7 b2 44.e8=Q# 1-0

php, web design Umbria, web marketing Umbria

PHP per aspiranti programmatori – A overview

PHP: Hypertext Preprocessor (PHP) è un linguaggio di scripting open source molto popolare e gratuito. Gli script PHP vengono eseguiti sul server. Ecco una breve lista di ciò che PHP è in grado di:

– Generazione di contenuto di pagina dinamico
– Creazione, apertura, lettura, scrittura, eliminazione e chiusura di file sul server
– Raccolta dei dati del modulo
– Aggiunta, eliminazione e modifica delle informazioni memorizzate nel database
– controllare l’accesso dell’utente
– crittografia dei dati
– e altro ancora!

Prima di iniziare questo tutorial, dovresti avere una conoscenza di base dell’HTML. PHP ha abbastanza potenza per lavorare al centro di WordPress, il sistema di blogging più attivo sul web. Ha anche il livello di profondità richiesto per eseguire Facebook, il più grande social network del web! PHP funziona su numerose e diverse piattaforme, tra cui Windows, Linux, Unix, Mac OS X e così via.

PHP è compatibile con quasi tutti i server moderni, come Apache, IIS e altro.
PHP supporta un’ampia gamma di database.
PHP è gratis!
PHP è facile da imparare e funziona in modo efficiente sul lato server.

Uno script PHP inizia con <? Php e termina con?>:

<code>
<?php
// PHP code goes here
?>
</code>

Ecco un esempio di un semplice file PHP. Lo script PHP utilizza una funzione incorporata chiamata “echo” per emettere il testo “Hello World!” su una pagina web.

<code>
<html>
<head>
<title>My First PHP Page</title>
</head>
<body>
<?php
echo “Hello World!”;
?>
</body>
</html>
</code>

Le istruzioni PHP terminano con il punto e virgola (;). In alternativa, possiamo includere PHP nel tag HTML.




My First PHP Page



echo "Hello World!";

</body>
</html>
</code>

However, the latest version of PHP removes support for <script language="php"> tags. As such, we recommend using <?php ?> exclusively. Puoi anche usare i tag PHP abbreviati, <? ?>, a condizione che siano supportati dal server.

<code>
<?
echo "Hello World!";
?>
</code>

Tuttavia, <? Php?>, Come standard ufficiale, è il modo consigliato di definire gli script PHP. PHP ha una funzione "echo" integrata, che viene utilizzata per l'output del testo. In realtà, non è una funzione; è un costrutto linguistico. In quanto tale, non richiede parentesi. Emettiamo un testo.

<code>
<?php
echo "I love PHP!";
?>
</code>

Il testo dovrebbe essere in virgolette singole o doppie. Ogni istruzione PHP deve terminare con un punto e virgola.

<code>
<?php
echo "A";
echo "B";
echo "C";
?>
</code>

Dimenticando di aggiungere un punto e virgola alla fine di una dichiarazione si ha un errore. Il markup HTML può essere aggiunto al testo nell'istruzione echo.

<code>
<?php
echo "<strong>This is a bold text.</strong>";
?>
</code>

Nel codice PHP, un commento è una riga che non viene eseguita come parte del programma. Puoi usare i commenti per comunicare agli altri in modo che capiscano cosa stai facendo, o come promemoria per te stesso di ciò che hai fatto.

Un commento a riga singola inizia con //:

<code>
<?php
echo "<p>Hello World!</p>";
// This is a single-line comment
echo "<p>I am learning PHP!</p>";
echo "<p>This is my first program!</p>";
?>
</code>

I commenti a più righe vengono utilizzati per comporre commenti che richiedono più di una singola riga.
Un commento su più righe inizia con / * e termina con * /.

<code>
<?php
echo "<p>Hello World!</p>";
/*
This is a multi-line comment block
that spans over
multiple lines
*/
echo "<p>I am learning PHP!</p>";
echo "<p>This is my first program!</p>";
?>
</code>

Aggiungere commenti mentre scrivi il tuo codice è una buona pratica. Aiuta gli altri a capire il tuo pensiero e ti aiuta a ricordare più facilmente i tuoi processi mentali quando fai riferimento al tuo codice in seguito.

Le variabili sono usate come "contenitori" in cui memorizziamo le informazioni.
Una variabile PHP inizia con un segno di dollaro ($), che è seguito dal nome della variabile. $ nome_variabile = valore;

Regole per le variabili PHP:

- Un nome di variabile deve iniziare con una lettera o un trattino basso
- Un nome di variabile non può iniziare con un numero
- Un nome di variabile può contenere solo caratteri alfanumerici e caratteri di sottolineatura (A-z, 0-9 e _)
- I nomi delle variabili fanno distinzione tra maiuscole e minuscole ($ name e $ NAME sarebbero due variabili diverse)

<code>
<?php
$name = 'John';
$age = 25;
echo $name;
// Outputs 'John'
?>
</code>

Nell'esempio sopra, si noti che non è necessario indicare a PHP quale tipo di dati è la variabile. PHP converte automaticamente la variabile nel tipo di dati corretto, in base al suo valore. A differenza di altri linguaggi di programmazione, PHP non ha comandi per dichiarare una variabile. Viene creato nel momento in cui prima si assegna un valore ad esso. Le costanti sono simili alle variabili ad eccezione del fatto che non possono essere modificate o indefinite dopo che sono state definite. Inizia il nome della tua costante con una lettera o un trattino basso. Per creare una costante, utilizzare la funzione define (): define (nome, valore, case-insensitive) parametri:

nome: specifica il nome della costante;
valore: specifica il valore della costante;
senza distinzione tra maiuscole e minuscole: specifica se il nome della costante deve essere senza distinzione tra maiuscole e minuscole. Il valore predefinito è falso;

L'esempio seguente crea una costante con un nome con distinzione tra maiuscole e minuscole:

<code>
<?php
define("MSG", "Hi Umbriaway!");
echo MSG;

// Outputs "Hi Umbriaway!"
?>
</code>

L'esempio seguente crea una costante con un nome insensibile alle maiuscole e minuscole:

<code>
<?php
define("MSG", "Hi Umbriaway!", true);
echo msg;

// Outputs "Hi Umbriaway!"
?>
</code>

Le variabili possono memorizzare una varietà di tipi di dati. Tipi di dati supportati da PHP: String, Integer, Float, Boolean, Array, Object, NULL, Resource.

Stringa PHP. Una stringa è una sequenza di caratteri, come "Hello world!". Una stringa può essere qualsiasi testo all'interno di un insieme di virgolette singole o doppie.

<code>
<?php
$string1 = "Hello world!"; //double quotes
$string2 = 'Hello world!'; //single quotes
?>
</code>

È possibile unire due stringhe usando l'operatore di concatenazione punto (.). Ad esempio:

echo $ s1. $ s2

PHP intero. Un numero intero è un numero intero (senza decimali) che deve corrispondere ai seguenti criteri:

- Non può contenere virgole o spazi vuoti
- Non deve avere un punto decimale
- Può essere positivo o negativo

<code>
<?php
$int1 = 42; // positive number
$int2 = -42; // negative number
?>
</code>

Le variabili possono memorizzare una varietà di tipi di dati. Un numero in virgola mobile o in virgola mobile è un numero che include un punto decimale.

<code>
<?php
$x = 42.168;
?>
</code>

Un booleano può essere rappresentato solo da uno dei due stati VERO o FALSO:

<code>
<?php
$x = true; $y = false;
?>
</code>

Le booleane vengono spesso utilizzate nei test condizionali, che verranno trattati più avanti nel corso.
La maggior parte dei tipi di dati può essere utilizzata in combinazione tra loro. In questo esempio, stringa e numero intero vengono messi insieme per determinare la somma di due numeri.

<code>
<?php
$str = "10";
$int = 20;
$sum = $str + $int;
echo ($sum);

// Outputs 30
?>
</code>

PHP converte automaticamente ogni variabile nel tipo di dati corretto, in base al suo valore. Questo è il motivo per cui la variabile $ str viene trattata come un numero nell'aggiunta. Le variabili PHP possono essere dichiarate ovunque nello script. L'ambito di una variabile è la parte dello script in cui la variabile può essere referenziata o utilizzata.

Gli ambiti di variabili più utilizzati di PHP sono locali, globali.
Una variabile dichiarata all'esterno di una funzione ha un ambito globale.
Una variabile dichiarata all'interno di una funzione ha un ambito locale e può essere raggiunta solo all'interno di tale funzione.

Considera il seguente esempio.

<code>
<?php
$name = 'David';
function getName() {
echo $name;
}
getName();

// Error: Undefined variable: name
?>
</code>

Questo script genererà un errore, poiché la variabile $ name ha un ambito globale e non è accessibile all'interno della funzione getName (). Le funzioni saranno discusse nelle prossime lezioni.

La parola chiave globale viene utilizzata per accedere a una variabile globale da una funzione.
Per fare ciò, utilizzare la parola chiave globale all'interno della funzione, prima delle variabili.

<code>
<?php
$name = 'David';
function getName() {
global $name;
echo $name;
}
getName();

//Outputs 'David'
?>
</code>

Con PHP, puoi usare una variabile per specificare il nome di un'altra variabile. Quindi, una variabile variabile considera il valore di un'altra variabile come suo nome. Per esempio:

<code>
<?php
$a = 'hello';
$hello = "Hi!";
echo $$a;

// Outputs 'Hi!'
?>
</code>

$$ a è una variabile che utilizza il valore di un'altra variabile, $ a, come il suo nome. Il valore di $ a è uguale a "ciao". La variabile risultante è $ hello, che contiene il valore "Ciao!"

Gli operatori eseguono operazioni su variabili e valori.

<code>
<?php
$num1 = 8;
$num2 = 6;

//Addition
echo $num1 + $num2; //14

//Subtraction
echo $num1 - $num2; //2

//Multiplication
echo $num1 * $num2; //48

//Division
echo $num1 / $num2; //1.33333333333
?>
</code>

L'operatore modulo, rappresentato dal segno%, restituisce il resto della divisione del primo operando per il secondo operando:

<code>
<?php
$x = 14;
$y = 3;
echo $x % $y; // 2
?>
</code>

Se si utilizzano numeri in virgola mobile con l'operatore modulo, verranno convertiti in numeri interi prima dell'operazione.

Gli operatori di incremento vengono utilizzati per incrementare il valore di una variabile. Gli operatori di decremento vengono utilizzati per decrementare il valore di una variabile.

<code>
$x++; // equivalent to $x = $x+1;
$x--; // equivalent to $x = $x-1;
</code>

Gli operatori di incremento e decremento precedono o seguono una variabile.

<code>
$x++; // post-increment
$x--; // post-decrement
++$x; // pre-increment
--$x; // pre-decrement
</code>

La differenza è che il post-incremento restituisce il valore originale prima che cambi la variabile, mentre il pre-incremento cambia prima la variabile e poi restituisce il valore.

Esempio:

<code>
$a = 2; $b = $a++; // $a=3, $b=2

$a = 2; $b = ++$a; // $a=3, $b=3
<code>

Gli operatori di incremento vengono utilizzati per incrementare il valore di una variabile. Gli operatori di assegnazione sono utilizzati per scrivere valori in variabili.

<code>
<?php
$x = 50;
$x += 100;
echo $x;

// Outputs: 150
?>
</code>

Gli operatori di confronto confrontano due valori (numeri o stringhe). Gli operatori di confronto vengono utilizzati all'interno di istruzioni condizionali e valutano TRUE o FALSE. Stai attento a usare == e ===; il primo non controlla il tipo di dati.


Operatori di confronto aggiuntivi:


Gli operatori logici vengono utilizzati per combinare istruzioni condizionali.

Un array è una variabile speciale, che può contenere più di un valore alla volta.
Se si dispone di un elenco di elementi (ad esempio un elenco di nomi), memorizzarli in variabili singole sarebbe simile a questo:

$name1 = "David";
$name2 = "Amy";
$name3 = "John";

Ma cosa succede se hai 100 nomi nella tua lista? La soluzione: crea un array! Gli array numerici o indicizzati associano un indice numerico con i loro valori. L'indice può essere assegnato automaticamente (l'indice parte sempre da 0), come questo:

$names = array("David", "Amy", "John");

In alternativa, puoi assegnare il tuo indice manualmente.

$names[0] = "David";
$names[1] = "Amy";
$names[2] = "John";

Abbiamo definito un array chiamato $ nomi che memorizza tre valori. È possibile accedere agli elementi dell'array tramite i loro indici. Ricorda che il primo indice dell' array non é 1 ma 0!

echo $names[1]; // Outputs "Amy"

Puoi avere interi, stringhe e altri tipi di dati insieme in un array. Esempio:

<code>
<?php
$myArray[0] = "John";
$myArray[1] = "<strong>PHP</strong>";
$myArray[2] = 21;

echo "$myArray[0] is $myArray[2] and knows $myArray[1]";

// Outputs "John is 21 and knows PHP"
?>
</code>

Gli array associativi sono array che utilizzano chiavi con nome assegnate a loro. Esistono due modi per creare un array associativo:

<code>
$people = array("David"=>"27", "Amy"=>"21", "John"=>"42");
// or
$people['David'] = "27";
$people['Amy'] = "21";
$people['John'] = "42";
</code>

Nel primo esempio, si noti l'uso dei segni => nell'assegnazione di valori alle chiavi nominate. Utilizzare le chiavi nominate per accedere ai membri dell'array.

<code>
$people = array("David"=>"27", "Amy"=>"21", "John"=>"42");
echo $people['Amy']; // Outputs 21"
</code>

Una matrice multidimensionale contiene uno o più array. La dimensione di una matrice indica il numero di indici che occorrerebbe per selezionare un elemento.

- Per un array bidimensionale, sono necessari due indici per selezionare un elemento
- Per un array tridimensionale, hai bisogno di tre indici per selezionare un elemento

Array con più di tre livelli di profondità sono difficili da gestire. Creiamo un array bidimensionale che contiene 3 matrici:

$people = array(
'online'=>array('David', 'Amy'),
'offline'=>array('John', 'Rob', 'Jack'),
'away'=>array('Arthur', 'Daniel')
);

Ora la matrice bidimensionale $ persone contiene 3 matrici e ha due indici: riga e colonna. Per accedere agli elementi dell'array $ people, dobbiamo puntare ai due indici.

<code>
$people = array(
'online'=>array('David', 'Amy'),
'offline'=>array('John', 'Rob', 'Jack'),
'away'=>array('Arthur', 'Daniel')
);
</code>

Ora la matrice bidimensionale $ persone contiene 3 matrici e ha due indici: riga e colonna. Per accedere agli elementi dell'array $ people, dobbiamo puntare ai due indici.

<code>
echo $people['online'][0]; //Outputs "David"
echo $people['away'][1]; //Outputs "Daniel"
</code>

Gli array dell'array multidimensionale possono essere sia numerici che associativi. In uno dei prossimi articoli affronteremo con Umbriaway Consulting la spinosa questione delle strutture di controllo, in modo da poter gestire con cicli e istruzioni condizionali i nostri dati

php, Senza categoria

Ma è difficile implementare bootsrap in Codeigniter?

Come fare a implementare bootstrap in codeigniter? E’ difficile, complicato, devo fare un corso alla NASA? Nulla di trascendentale, anche se prima bisognerebbe partire da come mostrare una pagina a piacere al posto della consueta Welcome.php che genera un saluto gratificante all’ utente, ma dando per scontato che l’utente sappia risolvere questo facile dilemma (che comunque verrà visto alla fine in questo tutorial, basta avere un pò di pazienza e sapere quello che si deve fare, per cui il primo passo è andare su https://www.codeigniter.com/download e scaricare il famoso framework che una il paradigma Model-View-Control ossia il model e le viste mandano i dati al controller che li rielabora e per quanto riguarda le viste rispedisce tutto alla VIEW per rilanciare indietro il codice al browser, più difficle da raccontare che da capire in pratica con un editor sotto mano. Scompattata la cartella mettiamo in XAMPP, rinominiamola in bootstrap e inseriamola dentro la cartella CODEIGNITER (è una scelta personale per visualizzare i progetti). A questo punto andiamo a collegarci con https://getbootstrap.com/docs/4.1/getting-started/download/ e scarichiamo dalla prima sezione quella del Compiled CSS and JS e scompattiamo nella cartella download. Andiamo poi su https://jquery.com/download/ e scarichiamo il file https://code.jquery.com/jquery-3.3.1.min.js che una volta salvato possiamo andare a inserire nella cartella js di bootstrap, dove andremo a creare una cartella ASSETS che tradotto sta per risorse. Questa cartella andrà inserita nella root del framework scaricato. A questo punto le nostre risorse ci sono e serve lincarle ma come? Nella vista andiamo a spezzare una pagina HTML che è composta da tre parti, quindi HEAD, BODY e FOOTER. Scomposta in tre file la nostra pagina web conterrà al suo interno i tag utili per la parte interessata di quella sezione, più le risorse per andare a lincare le nostre risorse. Ad esempio nella pagina head dovremmo linkare quello che ci interessa. Nell’ inclusione del file head.php metteremo

<html>

<head>

<title>inclusione di bootsrap in codeigniter</title>

<link rel=”stylesheet” href=”<?php base_url();?>assets/css/bootstrap.min.css”>

</head>

<body>

mentre nel file di inclusione footer.php inseriamo

<script src=”<?php base_url();?>assets/js/jquery-3.3.1.min.js”>

<script src=”<?php base_url();?>assets/js/bootstrap.min.js”>

</body>

</html>

a questo punto prendiamo il codice di una pagina web responsiva fatta con bootstrap, oppure uno sei suoi componenti, andando a recuperarlo o dal sito bootsrap menzionato sopra o da siti didattici come https://www.w3schools.com/bootstrap4/default.asp, prendiamo il codice del componente o della pagina che ci interessa e incolliamolo nel file body.php e siamo già a buon punto ma attenzione perchè adesso dobbiamo configurare il nostro framework che è settato per vedere di default la pagina di benvenuto. Quindi andiamo sul file di configurazione autoload.php e andiamo a inserire il parametro URL tra virgolette $autoload[‘helper’] = array(‘url’); Ora si va a cercare il file di configurazione routes.php e si imposta il parametro $route[‘default_controller’] = ‘home’; questo significa che devo creare un file nell’ Application controller che si chiamerà Main.php che conterrà al suo interno le seguenti istruzioni:

<?php

defined(‘BASEPATH’) OR exit(‘No direct script access allowed’);

class Home extends CI_Controller {

public function index()

{

$this->load->view(‘head’);

$this->load->view(‘body’);

$this->load->view(‘footer’);

}

in cui si evince che le viste vengono caricate sostanzialmente e dove si nota il nome della classe in maiuscolo che é uguale al nome del file e anche al richiamo che abbiamo nel file di instramento nella cartella config; tutto quello che bisogna fare ora è visualizzare il risultato ottenuto all’ indirizzo http://www.farwebdesign.com/codeigniter/bootstrap/ .Complesso? Complicato? Può darsi, ma il vantaggio di lavorare in questo modo è quella di avere alle spalle una applicazione solida e robusta che oltre a garantire maggiori margini di sicurezza semplifica e riduce all’ osso il codice nelle parti che vanno controllate, quindi maggior ordine e chiarezza su dove intervenire dopo una prima fase di inevitabile sbandamento! A questo punto complichiamoci la vita. Nella navbar in alto ci sono tre link, mentre con il classico html sarebbe facili riempirli magari con tre url del tipo https://www.umbriaway.eu/ o https://www.umbriashop.eu/ o http://www.umbriaway.it/ in codeigniter come si riesce a ottenere lo stesso risultato? Semplice si va sul file body e si completano i link vuoti trasformando la navbar in questo modo:

<nav class=”navbar navbar-expand-sm bg-dark navbar-dark”>

<a class=”navbar-brand” href=”#”>Navbar</a>

<button class=”navbar-toggler” type=”button” data-toggle=”collapse” data-target=”#collapsibleNavbar”>

<span class=”navbar-toggler-icon”></span>

</button>

</nav>

e funziona se spedisco i file via FTP su server? Certo che si perché sono file esterni ma se ci aggiungo un link che punta a un file tipo

<li class=”nav-item”>

<a class=”nav-link” href=”mission.php” target=”_blank”>Mission</a>

</li>

come faccio a vederlo? Lo inserisco con gli altri e visualizzo ma cosa ottengo? Qualcosa del tipo: The requested URL /codeigniter/bootstrap/mission.php was not found on this server. E allora che fare? Occorre andare sul controller e aggiungere la nuova vista con: $this->load->view(‘mission.php’); a questo punto ricarico e…..riottengo lo stesso risultato come mai?! Per questo dilemma lasciamo la soluzione a una delle prossime puntate! Che codeigniter sia con voi nei secoli dei secoli!

storia

La morte risolve tutti i problemi, niente uomini, niente problemi: 1929 STALIN assume il potere

Ma mica hanno dato quest’ anno come tema alla maturità il topic RUSSIA SOVIETICA, ma rivediamo il prima rispetto a questa fatidica data del 1929. Nel 1917 LENIN avvia la RUSSIA verso il comunismo. Nel 1922 con IL TRATTATO DI UNIONE crea l’ UNIONE SOVIETICA con RUSSIA, UCRAINA, BIELORUSSIA e TRANSCAUCASIA. Nel 1928 lo stato applica il primo piano quinquennale, con con cui lo Stato fissa obiettivi ambiziosi per l’intera economia. A questo punto verrebbe da chiedersi il dopo, ma prima diamo un occhiata alla Rivoluzione di Ottobre avvenuta nel 1917 che consegna le chiavi di casa a LENIN che creò uno stato e partito unico e nominò Josif Stalin come segretario generale. In seguito STALIN approfittò della propria posizione per assumere IL POTERE SUPREMO, diventando DITTATORE nel 1929, cinque anni dopo la morte di Lenin. Il primo passo del suo insediamento fu una rapida industrializzazione. Confiscò terre ai contadini per farle diventare grandi cooperative agricole da gestire collettivamente per produrre cibo alla NUOVA FORZA LAVORO. Negli anni trenta requisì il grano ai contadini in UCRAINA uccidendo MILIONI di persone. La polizia segreta condannò a morte migliaia di oppositori di STALIN nel periodo del terrore e molte altri vennero deportati nei campi di lavoro. Ciò nonostante STALIN DEFINIVA LA SUA TERRA COME UN LUOGO DI PACE E DI PROGRESSO e considerava SE STESSO UN UOMO CHE OPERAVA PER IL BENE COMUNE. Il dittatore dopo che la Germania nazista fu sconfitta (1945) riuscì nel suo intento di esportare il modello comunista al di fuori dei confini dell’ Unione Sovietica, in paesi come Polonia, Ungheria, Germania Est, Cecoslovacchia etc, conosciuti come BLOCCO SOVIETICO. A cascata tutto il mondo ebbe delle impennate sistemiche tipo Corea del Nord 1948, Cina 1949, Cuba 1959 e Vietnam 1975. Josef Stalin che ebbe a dire la famosa frase IO CREDO IN UNA SOLA COSA, LA POTENZA DELLA VOLONTA’ UMANA diventò effettivamente uno degli uomini più potenti del mondo e nel 1953, anno della sua morte, la sua grande amata nazione che pascolava in pace e in serenità (a suo dire) era in grado di affrontare anche come armamento bellico anche gli STATI UNITI. Tutto il resto è storia e il progressivo deterioramento del COMUNISMO SOVIETICO come modello che vede il suo apice simbolico da guerra fredda nel famoso match di scacchi mondiale tra il russo Spassky vs l’americano Fischer in Islanda nel 1972 che traghettò la storia verso la famosa crisi sistemica risolta poi da Gorbaciov negli anni ottanta con i fenomeni sociali della perestrojka e glasnost, eventi che portarono nel 1989 alla famosa caduta del crollo di Berlino e alla riunificazione della Germania. Nel 1991 il Congresso dei deputati del popolo approva la dissoluzione dell’ Unione Sovietica.

scrittura creativa

Aggettivi? No grazie.

Per vincere il concorso come peggiore scrittore condominiale di tutti i tempi basterebbe scrivere la propria prosa con uno stile freddo e asettico. Questo vale per la descrizione di un fatto oppure di un testo, anche se nel secondo caso non vi è bisogno di colorare troppo le vicende nel racconto con un accompagnamento accentuato dei gesti. L’aggettivo qualificativo quindi deve imporsi con energia prima del nome o dopo a seconda delle circostanze, perché il testo ha bisogno di colori, suoni, profumi. Non ci sono regole ferree sulla posizione dell’ aggettivo qualificativo (a differenza della lingua tedesca per esempio) ma occorre tenere presente che seppure un nome può essere colorato in diversi modi, sovraccaricare troppo il testo con gli aggettivi risulterebbe controproducente. Inoltre l’aggettivazione ternaria o quaternaria conferisce al testo una certa concitazione, quasi una tensione, che non si addice a ogni situazione. Analizziamo ora l’uso degli aggettivi attraverso autori consacrati, ad esempio il Piacere d’Annunziano:

A poco a poco, in quegli ozii intenti e raccolti, il suo spirito si stendeva, si svolgeva, si dispiegava, si sollevava dolcemente come l’erba premuta in su’ sentieri; diveniva infine verace, ingenuo, originale, libero, aperto alla pura conoscenza, disposto alla pura contemplazione;

Ci troviamo di fronte a una serie di aggettivi che non segue lo schema quaternario, perché l’autore anziché seguire una logica ritmica nella disposizione degli aggettivi, preferisce un ordine sparso che ha il potere di coinvolgere e affascinare il lettore, quasi di inebriarlo, di coinvolgerlo nella giradola vorticosa e ritmica delle sensazioni provate dal protagonista: verace, ingenuo, originale, libero, aperto alla pura coscienza. Non esiste infatti nessun legame diretto fra i cinque aggettivi usati da d’Annunzio per descrivere lo spirito.

Analizziamo come Deledda risolve in modo accattivante il focus letterario per risucchiare il lettore nella sua scrittura. Anziché scrivere in paura e tristezza “ne diede una cucchiaiata a un gatto nero con la gola e le zampe bianche“, risolve invece con “ne diede una cucchiata a un gatto. Era nero, ma aveva la gola e le zampe bianche“. Con l’ultima frase ci troviamo smarriti di fronte a un sentimento di tenerezza per l’animale che nel caso precedente avrebbe perso la sua forza espressiva.

Usare bene gli aggettivi può dunque fare la differenza, concludiamo con alcune perle di saggezza:

La grammatica è un pianoforte che io suono ad orecchio

(Joan Didion)

La maggior parte dei problemi del mondo sono dovuti a questioni di grammatica.

(Michel de Montaigne)

Un popolo comincia a corrompersi quando si corrompe la sua grammatica e la sua lingua.

(Octavio Paz)

social media marketing Umbria
chess, codeigniter, formazione, social media marketing Umbria

Ti chiami Fred Dewhirst Yates? Allora non potrai mai battere Alexander Alekhine a meno che ti metti a studiare seriamente CodeIgniter!

social media marketing UmbriaMa come fai a ottenere dei risultati a scacchi se hai un cognome simile Fred Dewhirst Yates? Dove vuoi andare! Eppure nella Alexander Alekhine vs Fred Dewhirst Yates “The Yates Motel” (game of the day Jan-28-2016) Karlsbad (1923), Karlsbad CSR, rd 7, May-06 King’s Indian Defense: Fianchetto. Karlsbad Variation (E62) 0-1 indirizzo http://www.chessgames.com/perl/chessgame?gid=1012179. Dalla mossa 33 in poi il bianco é costretto a ballare la danza di san vito come un tarantolato posseduto. Una brutta giornata agonisticamente parlando per il sommo Alekhine. Tornando ai nostri piccoli progressi risicati sul versante MVC Codeigniter certamente lavorare con un framework é meglio che dedicarsi a sviluppare classi da zero anche se ci sono altri vantaggi! Ad esempio proba e riprova é saltato fuori http://www.farwebdesign.com/codepagination/ che male non fa l’importante é ricordare che bisogna richiamare il controller dopo la pagina index.php e successivamente anche eventuale metodo incluso nel controller, più a facile a farsi che a capirsi ricorda social media marketing Umbria. Ma come hai fatto a fare http://www.farwebdesign.com/newscodeigniter/ questo fantastico sito web? Quali accorgimenti hai messo in atto, quali tutorial ti sei letto? Di sicuro qui ho trovato numerose risposte a tutti i miei perché: https://umbriawaynoir.wordpress.com/2018/01/17/un-posto-al-sole-di-codeigniter-prima-puntata-della-telenovelas-quando-arrivi-a-zurigo-nel-1953-come-alice-senza-pillola-blue-e-ti-ritiri-dal-torneo-perche-hai-visto-che-quei-giocatori-sono-delle-el/ .A questo punto la telenovelas prosegue visto che le cose che ci sono scritte hanno un riscontro scientifico dimostrato nella realtà! Siccome stiamo creando un database che visualizza delle notizie di gossip dobbiamo inserire gente come Belen in un database quindi il passo successivo sarà quello di creare la tabella all’ interno del nostro servizio in rete che ospita un DB MySql in questo caso:

CREATE TABLE news (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(128) NOT NULL,
slug varchar(128) NOT NULL,
text text NOT NULL,
PRIMARY KEY (id),
KEY slug (slug)
);

fatto questo serve una abilitazione per mettere in moto il DB quindi bisogna creare un file sotto la directory model di nome News_model.php che conterrà al suo interno il seguente codice:

<?php
class News_model extends CI_Model {

public function __construct()
{
$this->load->database();
}
}

public function get_news($slug = FALSE)
{
if ($slug === FALSE)
{
$query = $this->db->get(‘news’);
return $query->result_array();
}

$query = $this->db->get_where(‘news’, array(‘slug’ => $slug));
return $query->row_array();
}

social media marketing Umbriama invece seguire il facile tutorial che si trova all’ indirizzo https://codeigniter.com/user_guide/tutorial/news_section.html no?! Certo che si, questo ci dà modo di approfondire alcune problematiche sul file database.php che si trova dentro la directory config e che fa configurato con i parametri di collegamento al DB. Ma Codeigniter che limitazioni ha ha a livello di free software, ecco la risposta dal download ufficiale: La licenza MIT (MIT) Copyright (c) 2014 – 2018, British Columbia Institute of Technology: l’autorizzazione è concessa, a titolo gratuito, a chiunque ne ottenga copia di questo software e dei relativi file di documentazione (il “Software”), da trattare nel Software senza restrizioni, inclusi senza limitazioni i diritti utilizzare, copiare, modificare, unire, pubblicare, distribuire, sublicenziare e / o vendere copie del Software e per consentire a chi è il Software fornito a tal fine, alle seguenti condizioni: La suddetta nota sul copyright e questo avviso di autorizzazione devono essere inclusi in tutte le copie o parti sostanziali del software. IL SOFTWARE VIENE FORNITO “COSÌ COM’È”, SENZA GARANZIA DI ALCUN TIPO, ESPLICITA O IMPLICITO, INCLUSO, IN VIA ESEMPLIFICATIVA, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UN PARTICOLARE SCOPO E NON VIOLAZIONE. IN NESSUN CASO IL AUTORI O DETENTORI DI COPYRIGHT SARANNO RESPONSABILI PER QUALSIASI RECLAMO, DANNO O ALTRO RESPONSABILITÀ, ANCHE IN UN’AZIONE DI CONTRATTO, TORT O ALTRIMENTI, DERIVANTI DA, FUORI O IN COLLEGAMENTO CON IL SOFTWARE. Insomma il tutto si può riutilizzare liberamente! Fortunatamente o fortunosamente il pacchetto di download viene dotato anche di manuale interno per districarsi fin da subito a un uso massivo dell’ architettura MVC non proprio user-friendly all’ inizio! E se incontri problemi con il DB? Ti sei ricordato della cartella config presente dentro la cartella controllers? Ti dei ricordato del file autoload.php? Ti sei ricordato della stringa da configurare $autoload[‘libraries’] = array(‘database’); Dal punto di vista dinamico funziona che il controller fa da intermediario rispetto al blocco modello e alla directory vista che come dice il nome presenta le strutture visive dei dati mentre la logica di programmazione si trova nel modello. I metodi del controller si possono richiamare direttamente da URL, dopo la index.php digitando il nome dopo lo slesh tipo http://www.farwebdesign.com/newscodeigniter/index.php/news dove la index é la pagina di default che serve come riferimento base sempre e news invece costituisce il metodo richiamato. La questione delle maiuscole é importante soprattutto nella dichiarazione delle funzioni all’ interno del controller tipo class Pages extends CI_Controller { dove presumibilmente questo Page va a richiamare la cartella presente all’ interno della View tramite inclusione dentro la funzione specifica così analogamente a quanto avveniva con la logica di default presente al momento del download con welcome.php che al suo interno ospitava class Welcome extends CI_Controller { che a sua volta al suo interno richiamava il folder sotto la vista con $this->load->view(‘welcome_message’); This fa riferimento al controller corrente e va da sé che si possono mettere in piedi tanti controllor diversi a seconda delle funzionalità da mettere in piedi ciascuno che dialogherà trait d’union contemporaneamente con modello e vista. Invece di scrivere le operazioni del database direttamente nel controller, le query devono essere inserite in un modello, in modo che possano essere facilmente riutilizzate in seguito. I modelli sono il luogo in cui recuperare, inserire e aggiornare le informazioni nel database o in altri archivi dati. Rappresentano i tuoi dati. I dati vengono recuperati dal controller tramite il nostro modello, ma non viene ancora visualizzato nulla. La prossima cosa da fare è passare questi dati alle viste. E quando richiamo un metodo ad esempio quello citato precedentemente da social media marketing Umbria http://www.farwebdesign.com/newscodeigniter/index.php/news e mi salta fuori qualcosa del tipo:

A PHP Error was encountered

Severity: Compile Error

Message: Cannot redeclare News::view()

Filename: controllers/News.php

Line Number: 21

Backtrace:

significa che stai facendo il tuo lavoro di sviluppatore perché le grane da risolvere sono la sua essenza primaria e la mission per cui la sua carcassa esiste sul piano fisico! E con questo social media marketing Umbria ha finito la prima puntata, nel prossimo step verrà fatta la quadratura del cerchio e la revisione! ATTENZIONE, nota molto importante, anzi IMPORTANTISSIMA, quando si dichiarano le classi all’ interno del modello o del controllers lo si fa in maniera maiuscola, quando queste classi si estendono occorre UTILIZZARE LA LETTERA MAIUSCOLA, altrimenti nel fare il DEBUG si corre il rischio di farsi internare per esempio se creo un modello con questa sintassi class News_model extends CI_Model { il file non lo posso chiamare news_model se no bisogna imprecare in cirillico! Analogamente avviene per la classe default che ci ritroviamo nel download se creo questa classe per caricare una vista class Welcome extends CI_Controller { come devo chiamare il file chiede social media marketing Umbria? Con la lettera minuscola o maiuscola? Un altro errore molto frequente che si ritrova é quando apro l’estensione del CI_Controller con la graffa e poi faccio enormi pasticci NON CHIUDENDOLA UNA SOLA VOLTA IN FONDO, Visual Studio Code come editor aiuta perché con il suo plug in BRACKET PAIR COLORIZED può sottolineare questo errore o negligenza. Comunque correggendo tutti questi errori vedere l’effetto che fa con una applicazione ovviamente ancora un pò incompleta: http://www.farwebdesign.com/newscodeigniter/index.php/news nel senso che dobbiamo preoccuparci magari di estendere il dettaglio della notizia con nuove implementazioni!

social media marketing Umbria
chess, formazione, social media marketing Umbria

Problem Solving: e adesso come applico la paginazione su un modello scacchiera MVC?!

social media marketing UmbriaPrima di affrontare questa spinosa questione con social media marketing Umbria torniamo al tema delle mosse impossibili che scaturiscono dalla trasgressione dei principi generali, in questo caso lo sviluppo. All’ indirizzo http://www.chessgames.com/perl/chessgame?gid=1102375 abbiamo un bianco in forma che alla domanda mi sta attaccando il cavallo sulla casa d4 che si fa? Risponde e chi se ne! La partita finisce con il consueto tiro al piccione sul povero re nero rimasto IMPALATO al centro della scacchiera sulle colonne D ed E! Il problema della paginazione in MVC é simile ai geroglifici dell’ antico egizio, o hai studiato Champollion oppure brancoli nel buio. Lo si sa la paginazione essere anche in assenza di MVC già molto scorbutica e dove mettere in mano per risolvere una visualizzazione funzionale di record nella pagina non lo si sa bene, per cui ci si muove come un dinosauro cieco in una notte insonne dentro un gran canyon. Vediamo un pò di suggerimenti cercati in rete. Tizio suggerisce: creare una classe che calcoli il limite e l’offset corretti in base alla pagina. L’impaginazione è un gioco di numeri basato sulla quantità totale di record, record per pagina e pagina corrente. Merita una classe separata. Quindi puoi anche posizionare alcune logiche di visualizzazione in quella classe per creare dropdown di paginazione, nav e / o il javascript a discesa se odi anche ripetere tutte queste cose. Potresti persino renderlo una classe separata che richiede un oggetto di impaginazione:

controller

$pagination = new Pagination(10,1200,3);
$offset = $pagination->getOffset();
$limit = $pagination->getLimit();

view

$pages = $pagination->getPages();
$page = $pagination->getPage();
$total = $pagination->getTotal();
$pagination->makeMenu();

Qualcun altro suggerisce un approccio con Zend Paginator. C’è anche Sempronio che suggerisce di definire una classe per passarla alla vista:

<!–
<?
// IN CONTROLLER
$dataSet = array(1,2,3,4,5,6,7,8,9,10);

$currPage = ($_GET[“pg”])?$_GET[“pg”]:1;

$pagination = new Pagination(sizeof($dataSet), 2, $currPage);

// IN VIEW

// Use default styling/automatic generation
echo $pagination->getLinksHtml(“http://localhost/paginationtest.php&#8221;, “pg”);

// custom styling
for($i=1; $i<=$pagination->getNumPages(); $i++) {
//etc etc
}
?>

<?
class Pagination
{
private $totalItems;
private $itemsPerPage;
private $currPage;

public function __construct($totalItems, $itemsPerPage, $currPage)
{
$this->totalItems = $totalItems;
$this->itemsPerPage = $itemsPerPage;
$this->currPage = $currPage;
}

public function getLinksHtml($baseUrl, $pageVar)
{
$html = “”;

if ($this->hasPrev()) {
$html .= ‘<a href=”‘.$baseUrl.’?’.$pageVar.’=’.($this->currPage-1).'”>’;
$html .= ‘Previous’;
$html .= ‘</a> ‘;
}

for($i=1; $i<=$this->getNumPages(); $i++) {
if ($i != $this->currPage) {
$html .= ‘ <a href=”‘.$baseUrl.’?’.$pageVar.’=’.$i.'”>’.$i.'</a> ‘;
} else {
$html .= ‘ ‘.$i.’ ‘;
}
}

if ($this->hasNext()) {
$html .= ‘ <a href=”‘.$baseUrl.’?’.$pageVar.’=’.($this->currPage+1).'”>’;
$html .= ‘Next’;
$html .= ‘</a>’;
}

return $html;
}

public function hasPrev()
{
if ($this->currPage > 1) {
return true;
} else {
return false;
}
}

public function hasNext()
{

if ($this->currPage < $this->getNumPages()) {
return true;
} else {
return false;
}
}

public function getNumPages()
{
$numPages = ceil($this->totalItems/$this->itemsPerPage);

return $numPages;
}
}
?>

–>

approfondire tali problematiche all’ indirizzo: https://www.sitepoint.com/. Altri contributi si possono trovare su GIT:

<!–

<?php
/**
* MVC core class
* @category MVC
* @package Pagination
* @author Ross Masters <ross@php.net>
* @copyright Copyright (c) 2009 Ross Masters.
* @license http://wiki.github.com/rmasters/php-mvc/license New BSD License
* @version 0.1
*/
namespace MVC;
/**
* Pagination class
* Provides a simple pagination interface for selecting groups of records.
* @category MVC
* @package Pagination
* @copyright Copyright (c) 2009 Ross Masters.
* @license http://wiki.github.com/rmasters/php-mvc/license New BSD License
*/
class Pagination
{
/**
* Total records available in the table
* @var int
*/
private $total;
/**
* Records to return per set (or page)
* @var int
*/
private $perSet;
/**
* Number of the current set (1+) (or page)
* @var int
*/
private $setNumber;
/**
* Sets available based on total and perSet
* @var int
*/
private $sets;
/**
* Constructor
* @param int $setNumber Current set number (or page)
* @param int $perSet Number of records to return per set
* @param int $total Total records in table
*/
public function __construct($setNumber, $perSet, $total) {
$this->perSet = (int) $perSet;
$this->total = (int) $total;
$this->sets = (int) ceil($this->total / $perSet);
$this->setNumber = $this->changeSet((int) $setNumber);
}
/**
* Change the set to another number
* @param int $setNumber New set number
*/
public function changeSet($setNumber) {
// Minimum set number
if ($setNumber < 0) {
$setNumber = 1;
}
// Maximum set number
if ($setNumber > $this->sets) {
$setNumber = $this->sets;
}
return $setNumber;
}
/**
* Return the number of records to return
* If there are more than Pagination::perSet records return
* maximum per set otherwise return the amount of records
* left to fetch.
* @return int Number of records
*/
public function getCount() {
// Remainder of records
$rem = $this->total – ($this->perSet * ($this->setNumber – 1));
// Return maximum number of records if greater than perSet
if ($rem > $this->perSet) {
return $this->perSet;
}
// Otherwise return number of records (lt perSet)
return $rem;
}
/**
* Get the offset (records onwards from 0)
* @return int Offset
*/
public function getOffset() {
$offset = ($this->perSet * ($this->setNumber – 1));
return ($offset < 1) ? 0 : $offset;
}
/**
* Get the current set number
* @return int Current set number
*/
public function getSetNumber() {
return $this->setNumber;
}
/**
* Get total number of sets available
* return int Sets available
*/
public function getSets() {
return $this->sets;
}
}

–>

Anche su You Tube alla voce paginazion class saltano fuori cose interessanti tipo https://youtu.be/1SB0k3a3rNc e https://youtu.be/u-9jqRyWjvk per esempio mentre all’ indirizzo https://www.startutorial.com/articles/view/php-pagination-tutorial ci viene offerta anche la possibilità di scaricare lo zip da git hub con il file paginator.php:

<!–
<?php
/**
*@author The-Di-Lab
*@email thedilab@gmail.com
*@website http://www.the-di-lab.com
*@version 1.0
**/
class Paginator {
public $itemsPerPage;
public $range;
public $currentPage;
public $total;
public $textNav;
private $_navigation;
private $_link;
private $_pageNumHtml;
private $_itemHtml;
/**
* Constructor
*/
public function __construct()
{
//set default values
$this->itemsPerPage = 5;
$this->range = 5;
$this->currentPage = 1;
$this->total = 0;
$this->textNav = false;
$this->itemSelect = array(5,25,50,100,’All’);
//private values
$this->_navigation = array(
‘next’=>’Next’,
‘pre’ =>’Pre’,
‘ipp’ =>’Item per page’
);
$this->_link = filter_var($_SERVER[‘PHP_SELF’], FILTER_SANITIZE_STRING);
$this->_pageNumHtml = ”;
$this->_itemHtml = ”;
}

/**
* paginate main function
*
* @author The-Di-Lab <thedilab@gmail.com>
* @access public
* @return type
*/
public function paginate()
{
//get current page
if(isset($_GET[‘current’])){
$this->currentPage = $_GET[‘current’];
}
//get item per page
if(isset($_GET[‘item’])){
$this->itemsPerPage = $_GET[‘item’];
}
//get page numbers
$this->_pageNumHtml = $this->_getPageNumbers();
//get item per page select box
$this->_itemHtml = $this->_getItemSelect();
}

/**
* return pagination numbers in a format of UL list
*
* @author The-Di-Lab <thedilab@gmail.com>
* @access public
* @param type $parameter
* @return string
*/
public function pageNumbers()
{
if(empty($this->_pageNumHtml)){
exit(‘Please call function paginate() first.’);
}
return $this->_pageNumHtml;
}

/**
* return jump menu in a format of select box
*
* @author The-Di-Lab <thedilab@gmail.com>
* @access public
* @return string
*/
public function itemsPerPage()
{
if(empty($this->_itemHtml)){
exit(‘Please call function paginate() first.’);
}
return $this->_itemHtml;
}

/**
* return page numbers html formats
*
* @author The-Di-Lab <thedilab@gmail.com>
* @access public
* @return string
*/
private function _getPageNumbers()
{
$html = ‘<ul>’;
//previous link button
if($this->textNav&&($this->currentPage>1)){
echo ‘<li><a href=”‘.$this->_link .’?current=’.($this->currentPage-1).'”‘;
echo ‘>’.$this->_navigation[‘pre’].'</a></li>’;
}
//do ranged pagination only when total pages is greater than the range
if($this->total > $this->range){
$start = ($this->currentPage <= $this->range)?1:($this->currentPage – $this->range);
$end = ($this->total – $this->currentPage >= $this->range)?($this->currentPage+$this->range): $this->total;
}else{
$start = 1;
$end = $this->total;
}
//loop through page numbers
for($i = $start; $i <= $end; $i++){
echo ‘<li><a href=”‘.$this->_link .’?current=’.$i.'”‘;
if($i==$this->currentPage) echo “class=’current'”;
echo ‘>’.$i.'</a></li>’;
}
//next link button
if($this->textNav&&($this->currentPage<$this->total)){
echo ‘<li><a href=”‘.$this->_link .’?current=’.($this->currentPage+1).'”‘;
echo ‘>’.$this->_navigation[‘next’].'</a></li>’;
}
$html .= ‘</ul>’;
return $html;
}

/**
* return item select box
*
* @author The-Di-Lab <thedilab@gmail.com>
* @access public
* @return string
*/
private function _getItemSelect()
{
$items = ”;
$ippArray = $this->itemSelect;
foreach($ippArray as $ippOpt){
$items .= ($ippOpt == $this->itemsPerPage) ? “<option selected value=\”$ippOpt\”>$ippOpt</option>\n”:”<option value=\”$ippOpt\”>$ippOpt</option>\n”;
}
return “<span class=\”paginate\”>”.$this->_navigation[‘ipp’].”</span>
<select class=\”paginate\” onchange=\”window.location=’$this->_link?current=1&item=’+this[this.selectedIndex].value;return false\”>$items</select>\n”;
}
}
–>

A questo punto pensavamo di esserci chiariti le idee con social media marketing Umbria e invece no, siamo punto e da capo. Si vabbé adesso che ho tutte queste belle informazioni come le applico nella pratica di un cms mvc tipo http://www.farwebdesign.com/aforismimvc ? La risposta é dentro di te ma é sbagliata !

chess, formazione, wordpress

wordpress, le relazioni gerarchiche e quelle patte un pò così!

All’ indirizzo https://umbriawaynoir.wordpress.com/2018/01/11/zoltan-ribli-e-le-aperture-inglesi-perfette-quando-alla-mossa-21-un-cavallo-salta-sulla-casa-e6-ed-e-subito-punto/ abbiamo visto le gerarchie affrontate alle pagine di wordpress cosa succedeva quando non trovando gli alementi di livello uno si passava a cercare i muletti di altri livelli fino ad arrivare alla famosa index.php. Adesso dalla pagina saltiamo al singolo post e cerchiamo di visualizzare come lavora la gerarchia. Anche qui ho una situazione dove il primo elemento cercato sarà single-postype.php e lì dove non si trova il tutto trasla a single.php e qualora dovesse non trovarsi anche questo file si arriverebbe all’ index.php. Così per quanto avveniva per page.php anche per single.php parliamo di una pagina che gestisce staticamente i contenuti mentre per la pagina single-postype mil discorso é più complesso in quanto possiamo personalizzarla anostro piacimento. Questa é la logica della strategia di ricerca per i singoli articoli. Per le verifiche sul campo basta rinominare a turno i file critici e testare le visualizzazioni a video magari scrivendo dei tag h1 che ne esaltano l’identificazione (questa é la index.php per esempio). Per il settore is_single del grafico al momento é tutto e non ci resta che affrontare un discorso altrettanto dinamico sulla Kasparov – Timman match quarta di Hilversum 1985 dove alla mossa 26 il nero vede e attua la possibilita di andare a catturare un pezzo. Peccato che nel frattempo i pedoni del bianco vengono spinti fino a ridosso della promozione mettendo in difficoltà lo schieramento avversario ma con risultato finale a sorpresa! Sembra che il giovane K amasse vincere in maniera spettacolare contro Timman vedere ad esempio partite come http://www.chessgames.com/perl/chessgame?gid=1070170 oppure http://www.chessgames.com/perl/chessgame?gid=1070216 però nella partita immortalata il tutto si delinea come patta spettacolare dopo una serie scoppiettante di fuochi di artificio.