Помогите! Meta

Тема в разделе "PHP", создана пользователем Raccoon, 2 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    172
    Симпатии:
    9
    Добрый день.
    Ситуация следующая - есть сайт на php, где страница собирается последовательно:

    include('header.php');
    include('main.php');
    include('footer.php');

    и так далее.

    Так вот, есть раздел статьи, где у каждой статьи я создал 2 поля: meta description и meta keys.

    Т.е. есть 2 переменные $metadesc и $metakeys, которые надо запихать в в шапку сайта, между тэгами <head></head>, но проблема в том, что переменные присваиваются после того (в разделе main.php), как загрузилась шапка сайта в header.php.

    Как лучше поступить в такой ситуации?
    Спасибо.
     
  2. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    а что мешает присаваевать им значения в header.php?
    если проблема в каких то функциях, то их либо нужно обьявлять глобальными, либо выносит отдельно в клас.
     
  3. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Не, как я понял при вызове 'header.php' формируется шапка.
    Как кривой вариант на простой- заменять в шапке, str_replace функцией заменять <head>, на <head>'.$metadesc.$metakeys
    Как правильный вариант- по другому сделать формирование html страницы. Можно посмотреть и почитать как это сделанно в других cms.
     
  4. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    172
    Симпатии:
    9
    1. Шапка <head></head> грузится первой.
    2. Разделов много, динамические мета тэги грузятся только в разделе статей.
    3. Статьи вызываются где-то уже далеко от верха, в середине кода, получается надо как-то вернуться в <head></head> и подставить туда значения <meta name="keywords" content="'.$article_metakeys.'">.
    4. Получается надо как-то вернуться в прошлое и подставить переменные.
     
  5. studentpm

    studentpm

    Регистр.:
    8 ноя 2006
    Сообщения:
    184
    Симпатии:
    132
    Буферизация вывода по средствам ob_start() и ob_get_contents()

    ob_start();
    include('main.php');
    $content = ob_get_contents();
    include('header.php');
    print $content;
    include('footer.php');

    Ну как-то так. Хотя изначальный подход не очень...
     
  6. Kloster

    Kloster

    Регистр.:
    22 июн 2009
    Сообщения:
    216
    Симпатии:
    12
    Если идти в лоб - то это самый нормальный вариант, но лучше переделать структуру:

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

    Вообще, лучше пересмотреть структуру программы, чтобы сначала вся информация выбиралась из базы (записывалалсь в базу), а потом уже выводилась, так вышеозначенная проблема будет решена.
     
  7. Crazy108

    Crazy108 Создатель

    Регистр.:
    6 сен 2008
    Сообщения:
    45
    Симпатии:
    7
    еще один вариант решения, немного изменить последовательность действий.

    include('articleDB.php') <<<<<
    include('header.php');
    include('main.php');
    include('footer.php');

    при этом в файле articleDB.php ничего не отображать, а только обьявить переменные с данными статьи, и уже далее (ниже по коду) использовать эти данные там где это нужно, в том числе в main.php также уже будет доступен текст статьи, как и в header.php, её мета данные

    одна мое мнение - такой хардкодинг - не предел мечтаний для "знающего php"
     
  8. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    172
    Симпатии:
    9
    Пока сделал так, но должно же быть какое-то более профессиональное решение.. непонятно пока :(
     
  9. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    более професиальный подход это работа с шаблонизаторами, там ты четко отделяеш кодинг от выводимого шаблона. Попробуй покопать в эту сторону.
     
  10. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    172
    Симпатии:
    9
    Это я так понимаю ООП имеется ввиду или нет??

    Можно поподробнее как тема называется, хочу почитать :)
     
Статус темы:
Закрыта.