Creare alcune condizioni php

Lenigmista

Utente Attivo
17 Set 2015
50
2
8
Io uso Wordpress e la mia richiesta di creare alcune condizioni php è dovuta al fatto che vorrei eseguire alcune modifiche al codice del plugin Wp PostRatings (è il plugin per esprimere un voto).
Ho già letto il post: https://www.mrw.it/php/condizioni-if-else-switch_9486.html però mi mancano le basi e forse dopo che mi aiutate con questo problema, riuscirlo a capirlo meglio.

Questa è una parte di codice del plugin:
Codice:
if($post_ratings_score == 0 || $post_ratings_users == 0) {
		$post_ratings = 0;
		$post_ratings_average = 0;
		$post_ratings_percentage = 0;
	} else {
		$post_ratings = round($post_ratings_average, 1);
		[COLOR="#FF0000"]$post_ratings_percentage = round((($post_ratings_score/$post_ratings_users)) * 100, 0);[/COLOR]
	}
	$post_ratings_text = '<span class="post-ratings-text" id="ratings_'.$post_id.'_text"></span>';
	// Get the image's alt text
	if($ratings_custom && $ratings_max == 2) {
		if($post_ratings_score > 0) {
			$post_ratings_score = '+'.$post_ratings_score;
		}

La parte colorata di rosso è secondo me quella più importante. Essa esprime il punteggio in percentuale. Da -100% a +100%.

Adesso io vorrei aggiungere a questo codice le seguenti condizioni:

1) Se il punteggio è inferiore a 60%, il numero del voto dovrà essere rosso, altrimenti verde.

2) Se il punteggio è inferiore a 60%, aggiungere la parola "Brutto" dopo il voto in percentuale, altrimenti "Bello".

Potete aiutarmi o chiedo troppo?
 
Ultima modifica:
E' la riga in rosso che mi dà il valore numerico da 0 a 100.

Per intenderci, il plugin del voto è quello contenuto in questa pagina:
http://www.giocare-online-gratis.it/evito-ball/

(editerò il post e toglierò il link, dopo che hai letto)


Poi senza usare php, ma direttamente nelle impostazioni del plugin sto utilizzando questo testo:
HTML:
<b>  - Vota: </b>%RATINGS_IMAGES_VOTE% %RATINGS_TEXT% - (<b>%RATINGS_PERCENTAGE%%</b> su <strong>%RATINGS_USERS%</strong> voti.)
 
Ultima modifica di un moderatore:
ciao
non so perchè si vede male quello che hai postato, ma se non ho capito male quella riga stampa il valore pernetuale %RATINGS_PERCENTAGE%%, giusto?
se è così devi "mescolare" un po' di php, ti schematizzo
PHP:
<!--.... -->
<?php
$colore="<b style=\"color:#00FF00 ;\">";//colore testo verde
$fine="</b>";//stampa solo chiusura tag b
if($post_ratings_percentage < 60){
	$colore="<b style=\"color:#FF0000 ;\">";//colore testo rosso
	$fine=" brutto</b>";//stampa brutto e chiusura tag b
}
?>
<!--.... -->
- Vota: </b>%RATINGS_IMAGES_VOTE% %RATINGS_TEXT% - (<?php echo $colore;?>%RATINGS_PERCENTAGE%%<?php echo $fine;?> su <strong>%RATINGS_USERS%</strong> voti.)
<!--.... -->
 
Si è %RATINGS_PERCENTAGE%

a tentativi e dopo tanti errori fatali sono riuscito a mettere il tuo codice senza usare <?php all'inizio e ?> alla fine.

L'ho messo dopo la parentesi graffa chiusa della riga evidenziata in rosso. (che purtroppo non tu vedi)

Ho sistemato anche la seconda parte di codice con <?php echo $colore;?>%RATINGS_PERCENTAGE%%<?php echo $fine;?> ma non è cambiato nulla. Mi lascia il colore di default ed ho anche azzerato la cache.
 
ciao
guarda l'html che risulta, chiami la pagina e selezioni a monitor la parte che ti interessa, poi con il tool del bw fai "sorgente selezione", in teoria dovresti vedere (ipotesi 80)

HTML:
- Vota: ...... - (<b style="color:#00FF00 ;">80%</b> su <strong>ecc...

se non è così c'è qualcosa dento, penso, RATINGS_PERCENTAGE che già predispone lo style
 
ciao
prova una cosa del genere
usando il tag <span> al posto del <b> e costruendo il tutto prima
PHP:
<?php
$colore="<span style=\"color:#00FF00 ;font-weight:bold\">".;//colore testo verde bold
$fine=" %</span>";//stampa solo chiusura tag span
if($post_ratings_percentage < 60){
    $colore="<span style=\"color:#FF0000 ;font-weight:bold\">";//colore testo rosso bold
    $fine=" % brutto</span>";//stampa brutto e chiusura tag span
}
$percento=$colore.$post_ratings_percentage.$fine;//valore da stampare
?>
<!--....-->
- Vota: </b>%RATINGS_IMAGES_VOTE% %RATINGS_TEXT% - (<?php echo $percento;?> su <strong>%RATINGS_USERS%</strong> voti.) 
<!--....-->
 
Se faccio ispeziona elemento su 100%, vedo questo:
HTML:
<!--?php echo $colore;?-->
100%
<!--?php echo $fine;?-->

Quindi non viene riconosciuto come php? Sarà questo il problema principale?

Il codice del tuo ultimo messaggio mi dà errore. Pensavo fosse più semplice, forse è per questo che l'autore del plugin non mi ha voluto aiutare. Almeno ci hai provato, grazie lo stesso. :D
 
ciao
quello NON è php
PHP:
<?php echo $colore;?>
il php non si vede perche viene processato dal server prina di arrivare al bw
se si vede NON è php
 
Ciao,
ti disturbo se discutiamo sempre dello stesso problema di questo post? ovvero cambiare il colore in funzione del punteggio.
Il codice è cambiato perché ho sostituito il widget di voto con le stelline ma il plugin è lo stesso.
$value = str_replace("%RATINGS_AVERAGE%", number_format_i18n($post_ratings_average, 0), $value);

Io sono ignorante in materia ma credo che quello che comanda il punteggio sia:
- %RATINGS_AVERAGE%

oppure

- $post_ratings_average

Dico questo perché se a quello "0" di colore verde posto alla fine del codice, lo sostituisco con il numero 1, appare il numero decimale (es. 2,2), se metto 2 al posto dello "0" appariranno anche i centesimi (es. 2,22)


Il punteggio va da 1 a 10. Vorrei che se il punteggio è superiore a 6 debba essere di colore verde. Se è 5 o inferiore deve essere rosso.

Il codice PHP lo provo a mettere direttamente sotto a questo che ho trovato. In teoria dovrebbe funzionare dato che dal CSS il colore predefinito so modificarlo anche da solo.

I tentativi li faccio su un sito ancora in costruzione, quindi non preoccuparti se i primi tentativi vanno male.
 
ciao
intanto quel numero che hai evidenziato in verde determina il numero di decimali che devono essere visualizzati (attento dico visualizzati non eliminati)
per cui il ratings_average (giudizio medio) è la media dei giudizi, cioè se in
$post_ratings_average hai (es) 7.3692 e metti 0 visualizzi 7, se metti 1 7.3 ecc...
poi quella funzione number_format_i18n non è una funzione nativa di php, ma una funzione creata appositamente da chi ha creato il plug e che quindi non so esattemente cosa faccia
poi tutta quella riga
PHP:
$value = str_replace("%RATINGS_AVERAGE%", number_format_i18n($post_ratings_average, 0), $value);
non fa altro che
1) arrotonda il valore (sembrerebbe) contenuto in $post_ratings_average con number_format_i18n
2) cerca in $value la stringa %RATINGS_AVERAGE% e la rimpiazza con quanto ottenuto da number_format_i18n
3) fatto quanto sopra rivalorizza (riassegna) $value
da quello che ho capito (non conosco il plug e quindi non so cosa faccia) la variabile $value conterrà un valore da 1 a 10, quindi nel punto in cui la visualizzi (penso con un echo) potresti fare
PHP:
<?php
//.......
$colore ="#FF0000"; //colore rosso
if($value >= 6){$colore ="#00FF00";}//colore verde
echo "<span style='color:$colore;' >$value</span>";
//.....
?>
 
scusa Borgo, non ho mai lavorato con wordpress ne tantomeno con i suoi plugin,
quindi perdona la mia domanda,
supponendo che $value sia solo una variabile usata per la visualizzazione, non si potrebbe agire direttamente su di essa con,
PHP:
$colore = $post_ratings_average >= 6 ? '#00FF00' : '#FF0000';
$value = str_replace("%RATINGS_AVERAGE%", number_format_i18n($post_ratings_average, 0), $value);
$value = "<span style='color:$colore;' >$value</span>";
così non dovrebbe subire mutazioni successive o sbaglio ?
ciao
Marino
 
@Marino51
il tuo metodo ha funzionato perfettamente (cioè è rosso quando deve essere rosso e verde quando deve essere verde), però non è gran che dal punto di vista estetico.
Posso farti un'altra richiesta basandomi sul tuo ultimo metodo?

Anziché il "valore numerico", riesci a fare in modo che cambi il background in funzione del valore?
Io uso già questo div che credo sia messo già al posto giusto:
<div class="site-score">

Devo fare in modo che se value è inferiore a 6 risulti rosso altrimenti verde.

background-color: #00FF00;

Adesso non so se questa funzione php sia in grado di modificare il background di un div...

Se riesci a fare pure questo, farò successivamente altre richieste per perfezionare la tecnica.
 
non riesco ad immaginare come potrebbe essere impostato il codice, al fine di non scrivere una stupidata,
puoi postare la parte di codice che inizia con '<div class="site-score">', che comprende il "$value" fino al "/div" di chiusura ?
 
Ultima modifica:
ciao
PHP:
$colore = $post_ratings_average >= 6 ? '#00FF00' : '#FF0000';
$value = str_replace("%RATINGS_AVERAGE%", number_format_i18n($post_ratings_average, 0), $value);
$value = "<span style='color:$colore;' >$value</span>";
si potrebbe, pero, come dici tu, se $value serve solo per visualizzare ok, ma se serve per calcoli successivi si impalla
 
ciao
sempre con lo stesso metodo potresti
PHP:
<span style='background-color:$colore;' >$value</span>
oppore al posto di span puoi mettere div che forse è meglio gestibile
 
@Marino 51
forse conviene che scarichi il plugin e tieni aperto il file wp-postratings/wp-postratings.php .


Credo che il problema riguarda $Value che comprende l'intera funzione del plugin...
Vedi l'allegato 2744


Attualmente uso questo php
PHP:
$value = "<div style='background-color:$colore; width: 120px !important;' >$value</div>";


Io dovrei far cambiare solo il background e la dimensione della classe .site-score (cioè il primo quadro rosso dello screenshot) in funzione del valore di $Value e lasciare inalterato il resto. Però il div di site-score si trova nel HTML del plugin perché ce l'ho messo io in quanto non riesco ad individuare la sua posizione nel php.

Che casino, ma comunque ci siamo avvicinato molto alla soluzione finale :D
 
Ultima modifica:
Mi sa che non si può fare quello che chiedo io, ovvero modificare il background a seconda del punteggio non è possibile... perché sembrano tutti un unico codice.

Per ora mi limito a cambiare solo il colore numerico delle scritte in funzione del valore $Value utilizzando questo codice:

PHP:
$colore = $post_ratings_average >= 6 ? '#00FF00' : '#FF0000'; 
$value = str_replace("%RATINGS_AVERAGE%", number_format_i18n($post_ratings_average, 0), $value); 
$value = "<span style='color:$colore;' >$value</span>";

Ma serve ancora il vostro aiuto:

Potreste dirmi come impostare il colore grigio se il valore è fermo a zero.

E poi come impostare il valore giallo se è compreso tra 5 e 6.

Mentre se è inferiore a 5 deve essere rosso.

Se è superiore a 6 deve essere verde.

Anche se il colore cambia non solo per il numero ma anche per le scritte, non è un problema perché me le "gioco" con i css. So usare solo il css e un po' l'html.

Ho scritto tutti i casi possibili così sfrutterò questo tutorial per creare delle funzioni in base al colore :evil:
 
Ultima modifica:
ciao
PHP:
if($post_ratings_average==0){
	$colore ="#666666";//grigio
}elseif($post_ratings_average >0 && $post_ratings_average < 5){
	$colore ="#FF0000";//rosso
}elseif($post_ratings_average >=5 && $post_ratings_average <=6){
	$colore ="#FFFF00";//giallo
}else{
	$colore ="#00FF00";//verde
}
$value = str_replace("%RATINGS_AVERAGE%", number_format_i18n($post_ratings_average, 0), $value); 
$value = "<span style='color:$colore;' >$value</span>";
però attento es. se $post_ratings_average è 0.11 diventa rosso,
forse ti conviene forzare ad intero i valori es.
if((int)$post_ratings_average==0){... e cosi sugli altri elseif
 
Grazie di tutto. Alla fine non è male nemmeno questa soluzione, anche se il cambio di colore del background rendeva meglio l'idea.
Grazie anche per l'ultima dritta, al momento non la utilizzerò, perché i voti li ho impostati da 1 a 10, almeno su questo sono salvo.
Nel mio piccolo farò un guest post per pubblicizzarvi il sito... immagina che nemmeno l'autore del plugin mi ha voluto aiutare, che cattivone.
 

Discussioni simili