Back to top

Autore Topic: Rinominare una cartella su condizione  (Letto 2527 volte)

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Rinominare una cartella su condizione
« il: 22 Set 2016, 17:42:18 »
Buonasera

Ho questo codice che mi rinomina una cartella aggiungendo al nome della cartella presente l'ultimo id di una tabella che viene aggiornata prima della operazione di rinomina.

Codice: [Seleziona]
$lastid=$db->insertid();
echo "$lastid";
$oldappPath=JPATH_CONFIGURATION.'/components/com_datagrill/apps/'.'Rubrica';
$newappPath=JPATH_CONFIGURATION.'/components/com_datagrill/apps/'.urlencode($lastid).'_'.'Rubrica';
    if (!file_exists($newappPath))  {
        rename($oldappPath, $newappPath);
    }

Il codice funziona e mi rinomina correttamente una cartella esistente ma se rieseguo il codice mi crea una nuova cartella.
Alla prima esecuzione del codice, posto che ho una cartella 'Rubrica' questa viene rinominata in 7_Rubrica con l'ultimo id pari a 7 e fin qui tutto ok, ma alla successiva riesecuzione del codice mi crea una nuova cartella 8_Rubrica. Cosa che non dovrebbe fare visto che il comando è un rename e non un mkdir.
« Ultima modifica: 22 Set 2016, 17:56:05 da tomtomeight »

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Rinominare una cartella su condizione
« Risposta #1 il: 22 Set 2016, 17:54:44 »
Ho capito perché mi crea sempre una nuova cartella, insieme al codice, nel package mi ricarica la cartella di origine, allora mi chiedo quale condizione posso applicare per non farla rinominare se è già presente una cartella con parte del nome (senza id) uguale ad una cartella già presente?
Spiego meglio, se carico una cartella di nome Rubrica non voglio che venga rinominate se è gia presente una cartella con parte del nome contenente Rubrica.

Offline MariaElenaBoschi

  • Appassionato
  • ***
  • Post: 469
    • Mostra profilo
Re:Rinominare una cartella su condizione
« Risposta #2 il: 22 Set 2016, 19:55:35 »
bisognerebbe che quei nomi fossero gestiti anche a livello di database. Fare quello che vuoi fare è possibile ma le operazioni sui files sono molto onerose.
Per la condizione basta una regex o una comparazione di stringhe ma prima bisogna leggere i nomi delle cartelle leggendo ricorsivamente il contenuto della cartella che le contiene e raccogliendo i nomi in un array

http://php.net/manual/it/ref.filesystem.php
mancano 2 giorni alla mia prematura dipartita, saluti a tutti, meb.

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Rinominare una cartella su condizione
« Risposta #3 il: 22 Set 2016, 20:39:52 »
In effetti il nome della cartella è caricato nel db e l'id viene generato dal db. Se carico nel db un altro campo univoco associato alla applicazione tipo idapp potrei risolvere facendo una query nella tabella, se l'idapp esiste non rinomina nulla. Ma vorrei trovare una strada più semplice e forse basta una query solo sul nome della cartella che viene caricata. Cosa mi consigli?

Offline MariaElenaBoschi

  • Appassionato
  • ***
  • Post: 469
    • Mostra profilo
Re:Rinominare una cartella su condizione
« Risposta #4 il: 22 Set 2016, 20:46:10 »
quindi basta vedere se la cartella con quel nome nel db esiste
mancano 2 giorni alla mia prematura dipartita, saluti a tutti, meb.

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Rinominare una cartella su condizione
« Risposta #5 il: 24 Set 2016, 12:21:44 »
Ho utilizzato questo codice per verificare se nel db esiste il nome della cartella:

Codice: [Seleziona]
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('greeting');
            $query->from($db->quoteName('#__datagrill'));
$query->where($db->quoteName('greeting'). ' LIKE '. $db->quote('Rubrica'));
$db->setQuery($query);
$result = $db->loadObjectList();
print_r($result);
if (!empty($result))

{ return null; }
else
{ <---codice per aggiungere riga -->}
               
                       

La condizione è: se nel campo greeting esiste il valore 'Rubrica' non fare nulla.
Tutto ok, ma adesso come evito che nel package file venga comunque caricata la cartella Rubrica?


 



Web Design Bolzano Kreatif