2016-01-19 18 views
12

Sto provando a configurare il formatter PHP di Eclipse per mantenere i tag di apertura php su 1 riga se c'è solo una riga di codice tra di essi (mantenendo la formattazione di nuova riga predefinita se ci sono più linee di codice).Formatter PHP per blocchi di codice a linea singola

Esempio:

<td class="main"><?php 
echo drm_draw_input_field('fax') . '&nbsp;' . (drm_not_null(ENTRY_FAX_NUMBER_TEXT) ? '<span class="inputRequirement">' . ENTRY_FAX_NUMBER_TEXT . '</span>' : ''); 
?></td> 

deve essere formattato per:

<td class="main"><?php echo drm_draw_input_field('fax') . '&nbsp;' . (drm_not_null(ENTRY_FAX_NUMBER_TEXT) ? '<span class="inputRequirement">' . ENTRY_FAX_NUMBER_TEXT . '</span>': ''); ?></td> 

Esiste un modo per raggiungere questo obiettivo con Eclipse? O un altro suggerimento/formattatore?

EDIT: Sembra Eclipse non ha una tale opzione di formattazione, come spiegato nei commenti qui sotto. Qualche alternativa esistente che può fare questo?

+0

ne so non si può fare una cosa in '' eclipse' come eclipse' ha solo opzioni per formattare il codice Parte I significa la parte di testo all'interno dei tag php '', ma posso suggerire come creazione alternativa di un semplice script php che leggerà il contenuto del file php in formato formattandolo e sovrascrivendolo – Armen

+0

Sì, esso sembra che tu abbia ragione sulle opzioni di formattazione di 'Eclipse'. La domanda sta anche chiedendo un'alternativa esistente che possa farlo. Se ne conosci uno, gentilmente postalo :) – CreativeMind

risposta

4

Come ho già detto in discussione commento "As i know you can't do such thing in eclipse as eclipse has only options to format code part i mean the text part inside php tags <?php ...code text... ?>"

Ma si può raggiungere con questo script php

Molto importante prima di iniziare: Backup vostro progetto PHP che si sta andando a parlare in dirToArray() funzione

// Recursive function to read directory and sub directories 
// it build based on php's scandir - http://php.net/manual/en/function.scandir.php 
function dirToArray($dir) { 

    $result = array();  
    $cdir = scandir($dir); 

    foreach ($cdir as $key => $value){ 
     if (!in_array($value,array(".",".."))){ 
      if (is_dir($dir . DIRECTORY_SEPARATOR . $value)){ 
       $result = array_merge(
         $result, 
         dirToArray($dir . DIRECTORY_SEPARATOR . $value) 
       ); 
      }else{ 
       $result[] = $dir . DIRECTORY_SEPARATOR . $value; 
      } 
     } 
    } 

    return $result; 
} 

// Scanning project files 
$files = dirToArray("/home/project"); // or C:/project... for windows 

// Reading and converting to single line php blocks which contain 3 or less lines 
foreach ($files as $file){ 

    // Reading file content 
    $content = file_get_contents($file); 

    // RegExp will return 2 arrays 
    // first will contain all php code with php tags 
    // second one will contain only php code 
    // UPDATED based on Michael's provided regexp in this answer comments 
    preg_match_all('/<\?php\s*\r?\n?(.*?)\r?\n?\s*\?>/i', $content, $blocks); 

    $codeWithTags = $blocks[0]; 
    $code = $blocks[1]; 

    // Loop over matches and formatting code 
    foreach ($codeWithTags as $k => $block){ 
     $content = str_replace($block, '<?php '.trim($code[$k]).' ?>', $content); 
    } 

    // Overwriting file content with formatted one 
    file_put_contents($file, $content); 
} 

NOTA:Questo è solo semplice esame pio e, naturalmente, questo script può essere migliorato

// Result will be that this 
text text text<?php 
    echo "11111"; 
?> 
text text text<?php 
    echo "22222"; ?> 
text text text<?php echo "33333"; 
?> 
<?php 
    echo "44444"; 
    echo "44444"; 
?> 

// will be formated to this 
text text text<?php echo "11111"; ?> 
text text text<?php echo "22222"; ?> 
text text text<?php echo "33333"; ?> 
<?php 
    echo "44444"; 
    echo "44444"; 
?> 
+1

Stai bene! Se puoi migliorare il tuo codice per leggere direttamente le directory e prendere solo blocchi con 3 interruzioni di riga, modifica la risposta. Lo renderà un vincitore! :) –

+1

Questa espressione regolare corrisponde a tutti gli onliner. Dovrebbe rendere il tuo codice molto più semplice: https://regex101.com/r/jV7rG2/2 '<\? Php \ s * \ n (. *?) \ N \ s * \?>' – Michael

+0

Grazie @Michael ho aggiornato regexp in base al tuo suggerimento – Armen

Problemi correlati