2012-03-30 12 views
1

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

Итак, как сохранить его СУХОЙ?

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

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

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

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

+0

Зачем вам нужно делать переменные глобальными, если вы вызываете функцию? Кроме того, фрагмент кода будет отличным, чтобы делать предложения. –

+0

Проводка кода поможет. Взгляните на шаблон реестра http://www.devshed.com/c/a/PHP/Registry-Design-Pattern/ – dotoree

ответ

0

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

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

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

поэтому, нет необходимости включать что-либо вообще.

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

0

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

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

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

+0

Я мог бы, но это также, кажется, усложняет вещи без необходимости. Но определенно лучше, чем мои идеи. – CodeVirtuoso

0

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

Я создал вспомогательный класс Atthe верхней части моей страницы

$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))); 

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

Смежные вопросы