@IvanIF

Правильно ли я строю HTML конструкции на PHP?

У меня есть динамически изменяющийся HTML-список пользователей. В качестве элементов списка пользователей выступают HTML-ссылки, которые я формирую через PHP-функцию. Правильно ли я это делаю? Может есть более простой способ, о котором я не знаю? Это пример с простым HTML, а если надо будет сформировать HTML-код длинной 2500 символов?
$user_html_entity =
    '
    <a href="/user/' . $user_id . '" class="user" data-id="users___user_link">
      <div class="section_900">
        <!-- ## -->
        <img src="' . $user_avatar_link . '" />
        <!-- ## -->
        <div class="no_image_content">
          <p class="nickname">' . $user_nickname . '</p>
          <p class="online_status">' . Get_Online_Status_From_Datetime($user_last_online_datetime) . '</p>
          <p class="initials">' . $user_initials_info_string . '</p>
          <p class="location">' . $user_location_string . '</p>
        </div>
        <!-- ## -->
      </div>
    </a>
    '
    ;
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 2
@thisuserhatephp
Офлайн - losers Онлайн - lusers
Никогда так не делайте, не слушайте тех, кто будет говорить и советовать подобное. Вместо этой каши используй шаблонизаторы, возьми twig, он лёгкий в освоении. Так хоть 3к строк можешь писать (на самом деле не стоит писать 3к строк в одном twig шаблоне, лучше разбивать html на парты).
Главное всегда разделять логику и представление
$user_html_entity =
    '
    <a href="/user/' . $user_id . '" class="user" data-id="users___user_link">
      <div class="section_900">
        <!-- ## -->
        <img src="' . $user_avatar_link . '" />
        <!-- ## -->
        <div class="no_image_content">
          <p class="nickname">' . $user_nickname . '</p>
          <p class="online_status">' . Get_Online_Status_From_Datetime($user_last_online_datetime) . '</p>
          <p class="initials">' . $user_initials_info_string . '</p>
          <p class="location">' . $user_location_string . '</p>
        </div>
        <!-- ## -->
      </div>
    </a>
    '
    ;


Я всегда проклинаю тех, кто пишет такой код. Все из-за влияния ужасного, мерзкого, неимоверно отвратительного WP.

spoiler
Get_Online_Status_From_Datetime($user_last_online_datetime)

А именовать функции так, это вообще отдельная история...
Ответ написан
Immortal_pony
@Immortal_pony Куратор тега PHP
Шаблоны выносить в отдельные файлы.
Если тебе нужно весь этот HTML складывать в переменную, то вот тебе волшебная функция:

function render($part, array $vars=[]) {
    extract($vars);
    ob_start();
    require __DIR__ . "/views/" . $part . ".php"; // путь тут поправь в соответствии с твоими реалиями
    return ob_get_clean();    
}


Всё, дальше свои шаблоны можешь складывать в папке /views.
Итого, в твоем исходном файле будет вот такой код вместо твоей портянки:

$user_html_entity = render("user_entity", compact(
    "user_id", 
    "user_avatar_link", 
    "user_nickname",
    "user_last_online_datetime",
    "user_initials_info_string",
    "user_location_string"
));


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

Вот так примерно:

<a href="/user/<?= $user_id ?>" class="user" data-id="users___user_link">
    <div class="section_900">
        <img src="<?= $user_avatar_link ?>">
        <div class="no_image_content">
            <p class="nickname"><?= $user_nickname ?></p>
            <p class="online_status"><?= Get_Online_Status_From_Datetime($user_last_online_datetime) ?></p>
            <p class="initials"><?= $user_initials_info_string ?></p>
            <p class="location"><?= $user_location_string ?></p>
        </div>
    </div>
</a>


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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект