PHP - альтернатива использованию включения внутри цикла - PullRequest
1 голос
/ 30 марта 2012

У меня есть кусок HTML-кода (с некоторыми эхо-кодами PHP внутри него), который мне нужно показать несколько раз (внутри цикла) И на нескольких страницах.

Так, как сохранить это СУХОЙ?

Мои идеи, по общему признанию, не были блестящими:

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

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

Есть ли лучший способ? Это где, возможно, у ООП есть решение? (Я запускаю php 5.3)

Ответы [ 3 ]

0 голосов
/ 30 марта 2012

не могли бы вы передать нужные переменные в функцию?

 function foo($name, $something) {
      echo '<b>' . $name . '</b> is ' . $something;
 }

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

0 голосов
/ 30 марта 2012

Да, ООП может помочь вам, я создал набор классов , чтобы показать социальные плагины (Facebook, G plus, Twitter) на моих страницах, связанных с различными элементами.

Iустановите класс помощника в верхней части моей страницы

$socialPlugins = new SocialPluginsHelper(array(
        SocialPluginsHelper::HTML_AFTER_BUTTONS => '<div class="clear"></div>',
        SocialPluginsHelper::HTML_BEFORE_BUTTONS => '<div class="clear"></div>',
        SocialPluginsHelper::STYLE_OF_WRAPPER => 'margin-top:5px;',
        SocialPluginsHelper::CUSTOM_PLUGIN_STYLE => array(
                "TwitterButton" => "width:69px;",
                "FacebookLike" => "width:146px;")
)
);
$socialPlugins->add(PluginFactory::create("FacebookLike", array(FacebookLike::FB_WIDTH => "146")));
$socialPlugins->add(PluginFactory::create("TwitterButton"));
$socialPlugins->add(PluginFactory::create("Gplus")); 

, а затем внутри цикла я просто вызываю

$socialPlugins->renderAllButtons(array("FacebookLike" => array(FacebookLike::FB_HREF => $url)));

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

0 голосов
/ 30 марта 2012

Используйте шаблоны.

Просто напишите свой цикл внутри шаблона, а также весь другой код презентации.

<h1>Some list</h1>
<ul>
<?php foreach($data as $row): ?>
  <li><?=$row['name']?> whatever your block code goes here</li>
<?php endforeach ?>
</ul>

так что вообще ничего включать не нужно.

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

...