variabile php

urlatore

Nuovo Utente
12 Mag 2013
22
0
0
ciao a tutti, ho il problema seguente: devo estrarre il nome da una variabile per includere un file meteo per ogni città.
Ho creato una cartella con i file, es: Milano.php, Roma.php ecc
lo script è questo:

PHP:
 <?php
   global $multicity_db_table_name;
   $my_city_name =$wpdb->get_row("select cityname from $multicity_db_table_name where city_id='".$_SESSION['multi_city1']."'");
   echo $my_city_name->cityname;
   include(TEMPLATEPATH . '/meteo/$my_city_name->cityname.php'); ?>
    ?>

es: se scrivo
PHP:
 include(TEMPLATEPATH . '/meteo/Milano.php');
funziona, ma non conosco la variabile esatta per trasformare $my_city_name->cityname.php in nomecitta.php

spero di essere stato chiaro

grazie in anticipo
 
Ultima modifica di un moderatore:
PHP:
$fileCitta = $my_city_name->cityname . ".php"; // Roma.php
include(TEMPLATEPATH . $fileCitta);

Intendi questo?
 
Ultima modifica di un moderatore:
Comunque io riconsidererei il funzionamento dello script...

Come mai hai un file per ogni città? Non potresti semplicemente utilizzare lo stesso file con una variabile che globale indicante la città?
 
Non da errore ma non include nulla, I file sono tutti nella cartella TEMPLATEPATH/meteo/
La tua soluzione è la piu ovvia ma non sono in grado di fare quelle modifiche. Il file Milano.php è fatto cosi:

PHP:
<?php 
/*
Milano
*/

if ( false === ( $weather = get_transient( 'json_weather' ) ) ) {
    // URL delle API di wunderground forecast
    $url = 'http://api.wunderground.com/api/01d7190716843f6e/forecast/lang:IT/q/italy/Milano.json';
    // Carico il file json
    if ( false != ( $forecast = @file_get_contents($url) ) ) {
        // Decodifico il Json
        $forecast = json_decode( $forecast, TRUE );
        // Limito i dati da salvare
        $weather = $forecast['forecast']['simpleforecast']['forecastday'];
        // Imposto il transient
        set_transient( 'json_weather', $weather, ( 12*60*60 ) );
    }
} 

if ( !empty( $weather ) ) {
    foreach ( $weather as $day ) {
    ?>
        <li style="padding:0 2px;float:left;display:inline-block;position:relative;margin:3px auto;border-right:1px solid #dedede;">
            <span style="font-size:10px;">
                <?= ucfirst( date_i18n( 'D', $day['date']['epoch'] ) ) ?>
            </span>
            <span style="font-size:10px;"><?= $day['high']['celsius'] ?> °C</span>
            <img style="vertical-align:middle;" src="http://icons.wxug.com/i/c/g/<?= $day['icon'] ?>.gif" width="25" height="25">
        </li>
    <?php
    }
}
?>
 
Ultima modifica di un moderatore:
PHP:
<?php 

$cityname = $my_city_name->cityname;
echo "<script>console.log(\"cityname = " . $cityname . "\")</script>";

if ( false === ( $weather = get_transient( 'json_weather' ) ) ) {
    // URL delle API di wunderground forecast
    $url = 'http://api.wunderground.com/api/01d7190716843f6e/forecast/lang:IT/q/italy/' . $cityname . '.json'; // Dove in $cityname va memorizzata la città
    // Carico il file json
    if ( false != ( $forecast = @file_get_contents($url) ) ) {
        // Decodifico il Json
        $forecast = json_decode( $forecast, TRUE );
        // Limito i dati da salvare
        $weather = $forecast['forecast']['simpleforecast']['forecastday'];
        // Imposto il transient
        set_transient( 'json_weather', $weather, ( 12*60*60 ) );
    }
} 

if ( !empty( $weather ) ) {
    foreach ( $weather as $day ) {
    ?>
        <li style="padding:0 2px;float:left;display:inline-block;position:relative;margin:3px auto;border-right:1px solid #dedede;">
            <span style="font-size:10px;">
                <?= ucfirst( date_i18n( 'D', $day['date']['epoch'] ) ) ?>
            </span>
            <span style="font-size:10px;"><?= $day['high']['celsius'] ?> °C</span>
            <img style="vertical-align:middle;" src="http://icons.wxug.com/i/c/g/<?= $day['icon'] ?>.gif" width="25" height="25">
        </li>
    <?php
    }
}
?>



Metti questo al posto che richiamare il file, quando apri la pagina dovrebbe scrivere nella console Javascript:
cityname = cittàutente

così puoi controllare se la variabile viene popolata correttamente
 
Ultima modifica di un moderatore:
provato. non da errore ma mi cancella parte dell'header senza le icone del meteo.

Per farti capire meglio guarda l'header qui: http://www.sfogliacitta.it/
nel logo il nome della città SFOGLIACITTA.IT/nomecitta l'ho aggiunto inserendo questo:

PHP:
	<div class="logo">
	   <div class="city-name">/<?php
      global $multicity_db_table_name;
      $my_city_name =$wpdb->get_row("select cityname from $multicity_db_table_name where city_id='".$_SESSION['multi_city1']."'");
      echo $my_city_name->cityname;?></div>
	  <?php templ_site_logo(); ?></div>

se ci metto questo, mi da pagina bianca:

PHP:
	     <?php
      global $multicity_db_table_name;
      $my_city_name =$wpdb->get_row("select cityname from $multicity_db_table_name where city_id='".$_SESSION['multi_city1']."'");
     $fileCitta = $my_city_name->cityname . ".php"; // Roma.php
       include(TEMPLATEPATH . $fileCitta);
	  ?>


per ora ti ho incluso il file Milano.php per farti capire cosa visualizza:


PHP:
	     <?php
      global $multicity_db_table_name;
      $my_city_name =$wpdb->get_row("select cityname from $multicity_db_table_name where city_id='".$_SESSION['multi_city1']."'");
      include(TEMPLATEPATH . '/meteo/Milano.php');
	  ?>


ps:sei troppo gentile :-)
 
Ultima modifica di un moderatore:
Se non lo trovi prova così.

Inizia includendo solo questo codice:

PHP:
 <?php
   global $multicity_db_table_name;
   $my_city_name =$wpdb->get_row("select cityname from $multicity_db_table_name where city_id='".$_SESSION['multi_city1']."'");
   echo $my_city_name->cityname;
 ?>

E dimmi se viene stampato il nome della città correttamente.
 
Ultima modifica di un moderatore:
il log l'ho trovato ma è vuoto.

il nome certo che lo stampa, se vai 1 attimo su www.sfogliacitta.it lo vedi insieme al meteo

SFOGLIACITTA.it / Nome città

ti posto le 2 porzioni di codice che ho nell'head

PHP:
<div class="logo">
	   <div class="city-name">/<?php
      global $multicity_db_table_name;
      $my_city_name =$wpdb->get_row("select cityname from $multicity_db_table_name where city_id='".$_SESSION['multi_city1']."'");
      echo $my_city_name->cityname;?></div>
	  <?php templ_site_logo(); ?></div>
	  
	     <?php
      global $multicity_db_table_name;
      $my_city_name =$wpdb->get_row("select cityname from $multicity_db_table_name where city_id='".$_SESSION['multi_city1']."'");
      include(TEMPLATEPATH . '/meteo/Milano.php');
	  ?>



header.png
 
Ultima modifica di un moderatore:
PHP:
<?php 
global $multicity_db_table_name;
$my_city_name =$wpdb->get_row("select cityname from $multicity_db_table_name where city_id='".$_SESSION['multi_city1']."'");

if ( false === ( $weather = get_transient( 'json_weather' ) ) ) {
    // URL delle API di wunderground forecast
    $url = 'http://api.wunderground.com/api/01d7190716843f6e/forecast/lang:IT/q/italy/' . $my_city_name->cityname . '.json';
    // Carico il file json
    if ( false != ( $forecast = @file_get_contents($url) ) ) {
        // Decodifico il Json
        $forecast = json_decode( $forecast, TRUE );
        // Limito i dati da salvare
        $weather = $forecast['forecast']['simpleforecast']['forecastday'];
        // Imposto il transient
        set_transient( 'json_weather', $weather, ( 12*60*60 ) );
    }
} 

if ( !empty( $weather ) ) {
    foreach ( $weather as $day ) {
    ?>
        <li style="padding:0 2px;float:left;display:inline-block;position:relative;margin:3px auto;border-right:1px solid #dedede;">
            <span style="font-size:10px;">
                <?= ucfirst( date_i18n( 'D', $day['date']['epoch'] ) ) ?>
            </span>
            <span style="font-size:10px;"><?= $day['high']['celsius'] ?> °C</span>
            <img style="vertical-align:middle;" src="http://icons.wxug.com/i/c/g/<?= $day['icon'] ?>.gif" width="25" height="25">
        </li>
    <?php
    }
}
?>

Questo codice, che ti ho postato prima, dovrebbe per forza funzionare, è lo stesso che includi tu, ma al posto del nome della città nell'url ho messo una variabile che prende dal database con la tua query.
Ricordati che devi togliere tutto il resto relativo al meteo e lasciare solo questo.

Se non funziona devi riuscire a darmi un log di errore, dato che non può semplicemente non funzionare senza dire qualcosa.
 
Ultima modifica di un moderatore:
PHP:
// Tua query che popola $my_city_name
$my_city_name =$wpdb->get_row("select cityname from $multicity_db_table_name where city_id='".$_SESSION['multi_city1']."'");

// Vado a creare l'url inserendo il nome della città tra /italy/ e .json
$url = 'http://api.wunderground.com/api/01d7190716843f6e/forecast/lang:IT/q/italy/' . $my_city_name->cityname . '.json';

Se la città rimane la stessa c'è un problema nella tua query
 
Ultima modifica di un moderatore:
una cosa volevo precisare ho sempre usato solo quello impostato per Milano, devo capire come wunderground codifica i nomi delle citta. Esempio: Massa-Carrara il mio db lo stampa esatto, ma magari wunderground lo codifica come Massa_Carrara, quindi non lo troverà mai. per quello preferivo includere il richiamo dei file. Una volta stabilito che funziona mi vado a cercare le codifiche delle citta cambiandole nel file singolo...

no so se mi sono spiegato bene e poi non voglio farti perdere troppo tempo

se hai tempo guarda qui
http://www.wunderground.com/weather/api/d/docs?d=data/index#international_city

qui ho trovato il codice :
http://codeb.it/alternative-a-google-weather-api-meteo-di-wunderground-con-wordpress/
 
Ultima modifica:
ma come va inserita nella stringa...

Codice:
$url = 'http://api.wunderground.com/api/01d7190716843f6e/forecast/lang:IT/q/italy/' . $my_city_name->cityname . '.json'; 

str_replace("-","_",$my_city_name->cityname);
 
Codice:
$url = 'http://api.wunderground.com/api/01d7190716843f6e/forecast/lang:IT/q/italy/' . str_replace("-","_",$my_city_name->cityname) . '.json';

Però prima di iniziare a fare certi lavori bisognerebbe partire dalle basi, studiarsi la documentazione dei comandi che si useranno etc..Alla fine la documentazione è molto semplice e piena di esempi.
 
Ultima modifica di un moderatore:
ti ringrazio molto per la consulenza. Io non so programmare, vado per intuito e tra l'altro,questo tema è abbastanza ostico.
grazie mille ancora per il tuo tempo

Cesare
 
anche io ho imparato così :) però a posteriori penso avrei fatto meglio a seguire il consiglio che ti ho dato, e che mi diedero a loro volta altre persone tempo fa
 

Discussioni simili