Как сохранить PHP 'Исходным выводом HTML' Представления чистый [дубликат]

Посмотрев на исходный код фильтра даты в Angular's filters.js, я заметил, что Angular хранит список месяцев в $locale.DATETIME_FORMATS.MONTH. Вы можете использовать его для создания очень эффективного фильтра:

var app = angular.module("app", []); 

app.filter("month", function($locale) {
    return function(month) {
        return $locale.DATETIME_FORMATS.MONTH[month];
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
    <p ng-repeat="num in [0,1,2,3,4,5,6,7,8,9,10,11]">
       <span ng-bind="$index + 1"></span>: 
       <span ng-bind="$index | month"></span>
    </p>
</div>

Или отказаться от фильтра и положить его в вместо контроллера:

var app = angular.module("app", []); 

app.controller("ctrl", function($scope, $locale) {
    $scope.months = $locale.DATETIME_FORMATS.MONTH;
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
    <p ng-repeat="num in [0,1,2,3,4,5,6,7,8,9,10,11]">
       <span ng-bind="$index + 1"></span>: 
       <span ng-bind="months[$index]"></span>
    </p>
</div>

Или даже в качестве директивы. Это может быть излишним, но HTML выглядит довольно (для меня):

var app = angular.module("app", []);

app.directive("month", function($locale) {
    return {
        restrict: "A",
        link: function ($scope, elem, atrs) {
            $scope.$watch(atrs.month, function(month) {
                elem.text($locale.DATETIME_FORMATS.MONTH[month]);
            });
        }
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
    <p ng-repeat="num in [0,1,2,3,4,5,6,7,8,9,10,11]">
       <span ng-bind="$index + 1"></span>: 
       <span month="$index"></span>
    </p>
</div>
8
задан soulmerge 26 November 2009 в 21:12
поделиться

10 ответов

Меня это тоже беспокоит. Лучшее, что вы можете сделать, - это использовать tidy для постобработки текста. Добавьте эту строку в начало страницы (и будьте готовы к хаосу буферизации вывода , когда вы столкнетесь с первой ошибкой PHP с включенной буферизацией вывода):

ob_start('ob_tidyhandler');
13
ответ дан 5 December 2019 в 04:41
поделиться

Вы не можете получить чистый вывод при встраивании PHP. Я настоятельно рекомендую использовать какой-нибудь шаблонизатор, например Smarty . Помимо чистого вывода, шаблонизаторы имеют то преимущество, что они поддерживают некоторое разделение между кодом и дизайном, повышая удобство сопровождения и читаемость сложных веб-сайтов.

6
ответ дан 5 December 2019 в 04:41
поделиться

Имеет ли значение "красивый" вывод HTML? Вы будете вставлять выходной HTML-код в редактор всякий раз, когда захотите его просмотреть, и редактор, вероятно, будет иметь возможность отформатировать его правильно (или вам нужно будет сменить редактора!).

Я нахожу предложения по использованию дополнительный язык шаблонов (потому что это именно то, чем является PHP) отвратителен. Вы бы замедляли каждую страницу, чтобы исправить лишнее пространство или вкладку? Во всяком случае, я бы пошел в другом направлении и склонялся к тому, чтобы каждую страницу пропускать через инструмент, чтобы удалить оставшиеся пробелы.

4
ответ дан 5 December 2019 в 04:41
поделиться

Признаюсь, мне тоже нравится чистый HTML с красивым отступом. часто это получается не так, как я хочу, по тем же причинам, что и у вас. иногда отступы вручную и переносы строк не сохраняются, или это не работает из-за подшаблонов, в которых вы сбрасываете отступ.

и машинам действительно все равно. не о пробелах и не о комментариях, единственное, что их может заботить, - это минифицированные материалы, поэтому дополнительные пробелы и комментарии на самом деле контрпродуктивны. но иногда это так красиво * вздох *

, если firebugs недоступны, мне просто нравится это для отладки. из-за этого в большинстве случаев у меня есть возможность вручную активировать html tidy для текущего запроса. будьте осторожны: tidy автоматически исправляет определенные ошибки (в зависимости от параметров конфигурации),

4
ответ дан 5 December 2019 в 04:41
поделиться

Если это ДЕЙСТВИТЕЛЬНО важно в вашем конкретном случае, вы можете сделать это ...

<ul><?php foreach($navitems as $nav):?>
  <li><?=$nav?></li><?php endforeach; ?>
</ul>

Хотя, на мой взгляд, это хуже, потому что ваш код менее читабелен, даже если HTML такой же вы желаете.

2
ответ дан 5 December 2019 в 04:41
поделиться

Меня не волнует, насколько чистым будет вывод - это исходный исходный код, который его создал, который должен быть легко проанализирован - для меня как разработчика.

Если бы я исследовал вывод, я пропущу его через приборку, чтобы очистить его, если это потребовалось, чтобы внимательно его рассмотреть - но валидаторам тоже наплевать на лишние пробелы или табуляции.

На самом деле, я больше скорее всего удалит пробелы из выходного HTML, чем вставит какой-либо - меньше байтов на проводе = более быстрая загрузка. ненамного, но иногда это может помочь в сценарии с высоким трафиком (хотя, конечно, сжатие вывода помогает больше).

2
ответ дан 5 December 2019 в 04:41
поделиться

Несколько раз я приводил в порядок свой вывод для отладки сгенерированного HTML-кода. Я использовал табуляции и символы новой строки ... т.е.

print "<table>\n";
print "\t<tr>\n";
print "\t\t<td>\n";
print "\t\t\tMy Content!\n";
print "\t\t</td>\n";
print "\t</tr>\n";
print "</table>\n";
3
ответ дан 5 December 2019 в 04:41
поделиться

Просмотр неформатированного источника очень раздражает из-за множества вложенных div и множества записей, каждая из которых содержит эти div.

Я наткнулся на это дополнение для Firefox под названием Phoenix Editor. Вы можете просмотреть исходный текст в его редакторе, а затем нажать «форматировать», и он работает как шарм!

Ссылка здесь

1
ответ дан 5 December 2019 в 04:41
поделиться

Согласен, Чистый исходный текст очень важен, его хорошо прокомментированный, хорошо структурированный, и его содержание в этих исходных текстах, скриптах или коде очень быстро и просто. Вы должны рассмотреть фрагментацию вашего main, используя require (prior.php, header.php, title.php, content.php, post.php) в соответствующих местах, затем написать новую функцию под prever.php. php, который будет разбирать и компоновать html-тэги с помощью метода взрыва и делителя строк, имеет целое число для индекса табуляции, и всякий раз, когда находится в строке функций, тогда целое-- всякий раз, когда < и >, но не /> и находится в строке целое ++, и все это должно быть размещено правильно..... используйте цикл для перестройки еще одного строкового табиндекса для табуляции содержимого целочисленных времен.

1
ответ дан 5 December 2019 в 04:41
поделиться

Я делаю это следующим образом:

    <ul>
<?php foreach($navitems as $nav):?>
      <li><?=$nav?></li>
<?php endforeach; ?>
    </ul>

В основном все мои условные выражения и блоки циклов располагаются на одном уровне в пределах представлений. Если они вложены, я делаю отступ внутри начального тега PHP, например:

    <ul>
<?php foreach($navitems as $nav):?>
<?php     if($nav!== null) : ?>
      <li><?=$nav?></li>
<?php     endif; ?>
<?php endforeach; ?>
    </ul>

Таким образом, я четко вижу логику представления, когда просматриваю код, и это также способствует чистому выводу HTML. Вывод внутри блоков находится именно там, где я их поместил.

Предупреждение: PHP ест новые строки после закрывающего тега ?> . Это становится проблемой, когда вы делаете что-то вроде вывода внутри блока

 . 

<pre>
<?php foreach($vars as $var ) ?>
    <?=$var?>
<?php endforeach; ?>
</pre>

Будет выведено:

<pre> 
            0            1            2            3            4            5        </pre> 

Это своего рода взлом, но добавление пробела после делает его чистым.

Извините за чрезмерное количество блоков кода, но меня это тоже долго беспокоило. Надеюсь, это поможет примерно через 7 месяцев.

4
ответ дан 5 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: