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!

Annunci
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.