2016-01-19 51 views
12

Próbuję skonfigurować formatowanie Eclipse PHP, aby zachować otwieranie i zamykanie znaczników php w 1 linii, jeśli istnieje tylko 1 linia kodu między nimi (przy zachowaniu domyślnego nowego formatowania linii, jeśli jest więcej linii kodu).Formater PHP dla bloków kodu jednolinijkowego

Przykład:

<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> 

powinien być sformatowany do:

<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> 

Czy istnieje jakiś sposób, aby to osiągnąć z Eclipse? Lub inna sugestia/formatter?

EDIT: Wydaje Eclipse nie posiada takiej opcji formatowania, jak wyjaśniono w komentarzach poniżej. Jakieś istniejące alternatywy, które mogą to zrobić?

+0

co wiem nie można zrobić czegoś takiego jak w '' eclipse' eclipse' ma tylko opcje formatowania kodu Część I oznacza część tekstową wewnątrz tagów php '', ale mogę zasugerować jako alternatywne stworzenie prostego skryptu php, który odczyta dany format zawartości pliku php i nadpisze go – Armen

+0

Tak, to Wygląda na to, że masz rację co do opcji formatowania "Eclipse". Pytanie dotyczy również istniejącej alternatywy, która może to zrobić. Jeśli znasz jedną, uprzejmie po to :) – CreativeMind

Odpowiedz

4

Jak już wspomniano w komentarzu pytanie „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... ?>

Ale można to osiągnąć z tego skryptu php

bardzo ważne przed rozpoczęciem: Backup projekt php, które masz zamiar wymienić w dirToArray() funkcja

// 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); 
} 

UWAGA:to tylko prosty egzamin PLE i oczywiście skrypt można poprawić

// 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

Wygląda dobrze! Jeśli możesz ulepszyć swój kod, aby bezpośrednio czytać katalogi i brać tylko bloki z 3 liniowymi przerwami, edytuj swoją odpowiedź. To sprawi, że będzie zwycięzcą! :) –

+1

To wyrażenie regularne pasuje do wszystkich onlinerów. Powinien znacznie uprościć kod: https://regex101.com/r/jV7rG2/2 '<\? Php \ s * \ n (. *?) \ N \ s * \?>' – Michael

+0

Dzięki @Michael i zaktualizowałem regexp na podstawie twojej sugestii – Armen