Пользовательская конфигурация метатега - PullRequest
0 голосов
/ 19 мая 2011

У меня есть 2 таблицы, page и settings.

page - это просто набор полей, таких как name и slug, имеет 3 других поля для мета-тегов (заголовок, ключевые слова, описание) и отображает страницу cms.

settings имеет 3 поля: default_meta_title, default_meta_keywords, default_meta_description

Теперь я хочу отобразить теги default_meta_ * в источнике HTML, если на странице, на которой я сейчас нахожусь, нет определенной мета-информации, установленной на странице cms.

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

Таким образом, на домашней странице будет отображаться мой default_meta_ *, поскольку я не могу установить это в таблице cms pages.

Ответы [ 2 ]

4 голосов
/ 20 мая 2011

Есть два способа решения проблемы.

Сначала необходимо использовать sfYaml класс для обновления view.yml мета-тегами по умолчанию (см. документацию о view.yml ). После этого, если конкретная страница должна использовать другие метас, вы можете переопределить значения по умолчанию с помощью addMeta метода объекта ответа

Второй (как предложил ManseUK) - объявить слот, поместив код, подобный этому, в макет

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <?php include_javascripts() ?>
    <?php include_stylesheets() ?>
    <?php include_title() ?>
    <?php if (has_slot('metas')): ?>
      <?php include_slot('metas') ?>
    <?php else: ?>
      <?php include_component('page', 'metas') ?>
    <?php endif; ?>

    <link rel="shortcut icon" href="/favicon.ico" />
  </head>
  <body>

Метаданные по умолчанию будут отображаться с помощью page компонентов . Поверх вашего шаблона (я думаю modules/page/templates/showSuccess.php) поместите код

<?php slot('metas') ?>
  <?php if($page->hasMetas()):?>
    <!-- code to render nondefault page metas -->
    <?php echo $page->getMetas(); ?>
  <?php else: ?>
    <?php include_component('page', 'metas') ?>
  <?php endif;?>
<?php end_slot() ?>

Я предполагаю, что вы замените $page->hasMetas() реальным кодом, который проверит, есть ли у вашего page объекта метатеги.

На самом деле я бы предпочел пойти дальше и кодировать page компоненты для принятия параметров. Код в шаблоне будет выглядеть как

<?php slot('metas') ?>
  <?php include_component('page', 'metas', array('metas'=>$page->getMetas())) ?>
<?php end_slot() ?>

Решение о том, какие метас (по умолчанию или нет) должны отображаться, будет приниматься в page компонентах (я предполагаю, что вы можете легко получить настройки по умолчанию; t из вашей базы данных). Если параметры не были переданы (см. Код компоновки), ваш компонент также должен отображать мета-значения по умолчанию.

Надеюсь, это поможет.

0 голосов
/ 20 мая 2011

Вы можете использовать слот - проверить наличие слота в макете - если он существует, добавьте пользовательские мета-поля - если нет, добавьте поля по умолчанию

...