PDA

Visualizza versione completa : vBulletin file_exists()



icona
18-11-13, 10: 35
Ciao ragazzi!!!

stavo facendo una modifica al template di vBulletin (v. 4.2.0) e vorrei mettere un controllo sull'esistenza o meno di un immagine.
Una cosa del genere, nel template navbar_tabs

Only registered members can view HTML code.

la funzione file_exists() in vBulletin non viene accettata, ma non esiste una variabile sostitutiva precostruita dai programmatori per ottenere questo controllo...

A me non serve altro, non sto facendo niente di complicato, solo modificando un template esistente.
Mi sapete aiutare?


ico

ps: ho visto su vbulletin.org diverse di guide su come creare template personalizzati ed altro simile, ma non come creare un unica variabile personalizzata da usare sempre, in qualsiasi template anche esistente... certo che fare un plugin per avere una variabile che controlli l'esistenza di un file mi sembrerebbe quantomeno assurdo!!!

Asterix
18-11-13, 15: 27
Ciao

non ho provato ma teoricamente potrebbe funzionare :lol: sempre backups file prima di agire.

apri il file functions.php all'interno della cartella includes e alla fine copia questo codice


Only registered members can view code.

Poi vai nel template e scrivi questa condizione


Only registered members can view code.


fammi sapere

:bai

Andy86
18-11-13, 16: 02
:bai

Scusa se m'impiccio... ma fare direttamente "return $check" non ti pare più leggibile? :eye

Asterix
18-11-13, 16: 19
ma fare direttamente "return $check" non ti pare più leggibile? :eye

Dove ? sul template? non si puo' quella è la struttura :lol:

:bai

Andy86
18-11-13, 16: 24
No, intendevo sul function.php, invece di fare "if $check", tanto sempre il valore della variabile devi restituire.

In altre parole:


Only registered members can view code.

Almeno credo valga un po' per tutti i linguaggi.

icona
18-11-13, 17: 35
ecco cosa risponde vBulletin:


Il seguente errore è avvenuto durante il tentativo di valutare questo modello:
Could not find phrase ' L'espressione condizionale del seguente template contiene le chiamate delle funzioni:

<if condition="file_check('images/buttons/navbar/sublink/{vb:raw link.title}.png')">

Nome della funzione Uso dell'espressione
file_check file_check('images/buttons/navbar/sublink/{vb:raw link.title}.png')

Con qualche eccezione, le chiamate alle funzioni non sono permesse nelle espressioni condizionali dei template. Per favore torna indietro e riscrivi questa espressione.

Le seguenti funzioni sono permesse nelle espressioni condizionali dei template:
in_array() is_array() is_numeric() isset() empty() defined() array() gmdate() mktime() gmmktime() can_moderate() can_moderate_calendar() exec_switch_bg() is_browser() is_member_of() is_came_from_search_engine() vbdate()'.


non so, adesso nel file functions.php ho inserito la stringa di andy, ma ho testato tutte e tre le versioni (quella di Asterix e le due di Andy).


ico

Andy86
18-11-13, 18: 43
Ti dice che non puoi mettere la funzione nell'if, quindi devi passare la funzione per parametro (con variabile) anche nel template.
Una cosa del genere, ma non conosco la sintassi di vbulletin, quindi prendilo come pseudocodice:


Only registered members can view code.

In altri linguaggi funzionerebbe anche senza specificare "== true", ma non si sa mai.

icona
18-11-13, 19: 33
in realtà credo abbiano bloccato l'esecuzione delle funzioni nei template a parte quelle poche citate... non è un problema dell'if mi sembra..

magari sbaglio e non ho capito niente :)


ico

Andy86
18-11-13, 19: 52
Il messaggio dice le funzioni non sono permesse "nelle espressioni condizionali", "condizionale" significa SE, quindi IF.
Dette anche "espressioni booleane".

icona
18-11-13, 20: 03
si, verissimo, ma devo vedere cosa dice in inglese, perché la traduzione italiana non è perfetta... magari Asterix ha idea di cosa significhi per vBulletin... boh?
faccio comunque una prova mettendo qualcosa simile a quello che dici tu!


ico

Asterix
19-11-13, 07: 29
A quanto pare l'if conditional limita troppo, devo verificare se c'è qualche altro files da variare per permettere l'aggiunta di funzioni permesse.

:bai

icona
19-11-13, 09: 16
@Asterix

se vuoi provare quello che sto facendo...
template navbar_tabs
cerchi questo:

Only registered members can view HTML code.

e lo sostituisci con questo:

Only registered members can view HTML code.

grazie ad entrambi per l'aiuto che mi state dando per questa "cavolata" :)
ico

icona
19-11-13, 16: 06
credo che la soluzione stia in questo HowTo di @cellarius su vbulletin.org: link (http://www.vbulletin.org/forum/showthread.php?t=228078)

purtroppo non arrivo fino al punto di capire tutto quello che scrive, quindi mi devo affidare a voi!
Mi pare di capire che attraverso un plugin che crei una variabile in "forumhome" sia possbile poi richiamarla ovunque (anche in CMS???).
Mi pare poi di capire che sia possibile creare diverse variabili personalizzate ed inizializzarle tutte insieme... così fosse mi servirebbe inizializzare sia quella richiesta prima che una variabile che mi definisca la sezione del CMS in cui mi trovo...

Asterix
19-11-13, 20: 43
Scusa ma non puoi mettere il richiamo dell'immagine nel titolo della label? Mi pare di ricordare che accetti anche l'html.
Utilizzare la var link.title non mi pare il massimo, ipotizza che il title contenga uno spazio questo ti crea problemi con i nomi file.

:bai

icona
19-11-13, 22: 24
vero, il mio problema non è tanto quello, quanto che non mi serve un img per ogni link, quindi vedrei, su IE e Chrome (usando Firefox non me n'ero nemmno accorto!) il quadratino ianco con x rossa...


ico

Kirk78
24-11-13, 21: 06
Scusate se mi intrometto anche io. Su vb non conosco molto, ma ho letto qualche manuale, sopratutto ultimamente.
In php

Only registered members can view code.

A quanto ho capito l'equivalente in vb sui template è

Only registered members can view code.

Quindi, come diceva Andy86, visto che

Only registered members can view code.
risponde con TRUE o FALSE se esiste nomefile potresti tentare di fare la variabile $testfile (non vorrei che file_exist sia una parola riservata)

Only registered members can view code.
anche se non so se prende {vb:raw link.name}, quindi dare in pasto ai Template Conditionals $trovoimmagine, oppure per sicurezza $trovoimmagine == true come suggerito da Andy86 (anche io penso che non serva).

Anche il mio diciamo che è un semicodice visto che non conosco vb. Se ho detto sciocchezze mi defilo con vergogna.

:bai

icona
24-11-13, 21: 26
il problema rimane: non riesco ad inizializzare la customvar... sembra si debba creare un plugin ad hoc...


ico

Kirk78
25-11-13, 08: 39
Quale variabile non riesci ad inizializzare? Se intendi dal mio post, e l'errore è dato da $testfile allora non riesce ad "abbinare" {vb:raw link.name} ad una stringa.
Cosa è {vb:raw link.name}? Se è una stringa potresti concatenare le stringhe "http://www.collectiontricks.it/images/buttons/navbar/sublink/", {vb:raw link.name} e ".png" con l'operatore . non so tipo

Only registered members can view code.
sempre in una variabile, per darla in pasto alla Conditional "pulita" (senza apici dentro a doppi apici con parentesi graffe :shock)
Se non è una stringa la devi trasformare in tale perché file_exists() vuole come parametro una stringa. La funzione file_check() di Andy86 mi sembra una ridondanza e non vorrei che non venisse "vista" dal template, magari perché chi sono altre funzioni o variabili con lo stesso nome :boh

Essendo la piattaforma vb non opensource posso aiutare solamente teoricamente. Come fa anche Andy86.

:bai

EDIT Mi sono appena accorto che CT ha trasformato il mio codice aggiungendo http://www.collectiontricks.it quindi è probabile che ci sia una funzione o altro che aggiunge come base il link del vb attuale, e quindi il file_exist() o anche la if può non capire la trasformazione. Si vede che è complesso inserire un codice vb in una piattaforma vb :boh

icona
25-11-13, 09: 42
Oltre che complesso, da quello che sono riuscito a capire io (che non sono un programmatore) è anche mal spiegato!

Io sono riuscito solo a capire che ci sono alcune variabili che hanno creato già i programmatori VBulletin (hanno bloccato quasi tutte le variabili e le funzioni php nei template) che sono facilmente usabili. Il resto lo di deve creare "ad hoc"in base alle proprie esigenze creando un plugin che inizializzi la variabile in modo da essere usata nei template e poi imposti i valori dela variabile con il codice php sempre nel plugin. La disucussione (unica) che sono riuscito a trovare è questa (http://www.vbulletin.org/forum/showthread.php?t=228078).

Però come funzioni la creazione di un plugin io ancora non lo ho ben capito... Asterix ne ha creato qualcuno, ma non so se lo ha fatto per avere una semplice variabile da usare in tutti i template...


ico

Kirk78
25-11-13, 10: 10
Non posso leggere i codici, non avendo la licenza vb, ma mi sembra di capire che hanno creato una nuova classe vB_Template con i metodi create e preRegister... il resto non lo posso capire senza i codici :boh
Mi sembra che dica che le variabili e array per essere "passate" dai plugin ai template devono prima essere pima registrate, non che deve essere fatto un plugin per poter avere una variabile.

Poi non capisco come avrebbero fatto a "bloccare" le variabili di uno script php all'interno dello stesso script :m:: quello che dicevo io è utilizzare le variabili direttamente nello script del template (sempre se ci ho capito qualcosa di vb) e usarle solamente li e non passarle da un plugin ad un template, altrimenti (pare) sia necessario prima registrarle.

Parlo da programmatore e non come conoscitore di vb (per quello c'è già Asterix).

:bai

Asterix
28-11-13, 14: 46
Si qualche plugin l'ho creato :lol:

ora non ho mai provato a passare valori multipli su una unica var devo fare dei test. Ora però sono leggermente incasinato e non riesco a concentrarmi pensa che ho altri due progetti fermi sempre su vb.

:bai