Textpattern customField textarea

17 августа 2010

В Textpattern  в админке есть поле textarea - Ключевые слова. Я подумал что это ключевые слова которые описывают страницу и должны попадать в html мета тег "keywords". Но я ошибся, эти ключевые слова предназначены немного для другого, хотя их очень удобно применять именно для занесения в мета тег  "keywords". И на всех сайтах под управлением Textpattern я использую поле "Ключевые слова" как мета тег "keywords". А вот для заполнения мета тега "description" не специального поля. Есть конечно поле выдержка, но его я использую по назначению. Практически всегда это поле занято у меня в структуре сайта. Зато в системе Textpattern к каждой статье можно добавить дополнительно 10 произвольных полей, это так называемые "Настраиваемые поля". Вот одно из этих полей я и решил использовать для заполнения мета тега "description".

Но вот не задача все "Настраиваемые поля" имеют тип INPUT - однострочную строку и ограничены по длине. Вот это нам и предстоит подправить. Иными словами "Настраиваемые поля" переделаем из однострочного поля в многострочное (TEXTAREA). Сразу предупрежу что метод которым мы это переделываем не совсем правильный, так как это необходимо делать с помощью плагина, которого пока нет. Или я плохо искал.

Для начала необходимо подправить тип столбца в базе данных mysql. В таблице textpattern есть 10 столбцов custom_Х. Где Х - это число от 1 до 10. Для простаты я решил использовать custom_1 и изменил его тип на тип "text".  Далее необходимо подправить код в системе Textpattern. Вот правка этого кода и есть небольшое нарушее, так называемый хак, который в принципе необходимо реализовать с помощью плагина. Находим файл txp_article.php в папке ../textpattern/include/. Находим место в коде где выводятся поля custom. Это место помечено комментарием // custom fields, believe it or not. "Настраиваемые поля" выводятся кодом:
$max = get_pref('max_custom_fields', 10);
$cf = '';
for($i = 1; $i <= $max; $i++)
{
$custom_x_set = "custom_{$i}_set";
$custom_x = "custom_{$i}";
$cf .= ($$custom_x_set !== '' ? custField( $i, $$custom_x_set, $$custom_x ): '');
}

echo pluggable_ui('article_ui', 'custom_fields', $cf, $rs);


Мы используем первое поле, поэтому цикл начинаем не с 1 а с двойки и перед выводом всех полей выводим первое поле. В итоге получаем такой код:

$max = get_pref('max_custom_fields', 10);
$cf = '';
for($i = 2; $i <= $max; $i++)
{
$custom_x_set = "custom_{$i}_set";
$custom_x = "custom_{$i}";
$cf .= ($$custom_x_set !== '' ? custField( $i, $$custom_x_set, $$custom_x ): '');
}
echo graf(gTxt('meta_description').br. '<textarea style="width:155px;height:70px" rows="1" cols="1" name="custom_1" tabindex="3">'.$custom_1.'</textarea>');
echo pluggable_ui('article_ui', 'custom_fields', $cf, $rs);


Надо сказать что и здесь мы не сделали вывод первого поля уникальным так как задали вывод строго с названием  'meta_description'. Зато задали вывод с помощью html тега TEXTAREA, что дает нам многострочное поле.

И в админке сайта в разделе "Продвинутые настройки" задаем "Настраиваемое поле 1" название - meta_description. Дальше уже по вкусу и цвету. Я же создал дополнительную форму meta_dynamic, тип Misc. Форма содержит простой код:
<meta name="description" content="<txp:custom_field name="meta_description" />" />

Надеюсь и у вас все получится.

Андрей Лебедев

,

, , , ,

Комментарий

Нет комментарий.

Комментировать: