#php
Вопрос:
Я пытаюсь передать переменные в include, который появляется на странице несколько раз. Хотя следующий пример может технически работать, я уверен, что есть гораздо лучший способ сделать это. Любая помощь будет признательна.
index.php
<?php
$user_avatar = "user-1-avatar.jpg";
$user_username = "username-1";
$user_name = "User 1";
include '/_user-card.php';
?>
<?php
$user_avatar = "user-2-avatar.jpg";
$user_username = "username-2";
$user_name = "User 2";
include '/_user-card.php';
?>
_user-card.php
<div class="user-card">
<img src="<?php echo $user_avatar; ?>" alt="">
<p class="user-card__username"><?php echo $user_username; ?></p>
<p class="user-card__name"><?php echo $user_name; ?></p>
</div>
Комментарии:
1. Вы можете преобразовать include в функцию и просто вызывать ее несколько раз с различными параметрами.
2. Этот пример работает, но может создать проблемы с безопасностью, выводя переменные без очистки. Возможно, вам захочется заглянуть в библиотеки шаблонов PHP. Список из них можно найти здесь, например: dunebook.com/best-php-template-engine
Ответ №1:
Вы можете создавать данные, которые можно использовать снова и снова, используя следующую функцию.
function get_user_card($params = array()){
$output = '';
extract($params);
if( isset($user_avatar) amp;amp; isset($user_username) amp;amp; isset($user_name) ) {
ob_start();
?>
<div class="user-card">
<img src="<?php echo $user_avatar; ?>" alt="">
<p class="user-card__username"><?php echo $user_username; ?></p>
<p class="user-card__name"><?php echo $user_name; ?></p>
</div>
<?php
$output = ob_get_contents();
ob_end_clean();
}
return $output;
}
$user_1 = get_user_card(
array(
"user_avatar" => "user-1-avatar.jpg",
"user_username" => "username-1",
"user_name" => "User 1"
)
);
echo $user_1;