Добавление нового поля в материал Joomla 1.5

Появилась необходимость в материалы Joomla 1.5 добавить новое поле, точне добавление поля в стандртный компонент Joomla com_content.

Ну приступим 🙂

1. Добавление в шаблон интерфейса back-end

Открываем файл administrator/components/com_content/admin.content.html.php — здесь содержится шаблон страницы добавляемого/редактируемого материала. Идем на строку номер 833* где видим закрывающий тег. Непосредственно после него добавляем свою таблицу:

<table class=»adminform»>
<tbody>
<tr>
<td>Новое поле:</td>
<td><input id=»new_field» class=»inputbox» maxlength=»255″ name=»new_field» size=»40″ type=»text» value=»<php echo $row->new_field; ?>» /></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

2.  Добавление в шаблон интерфейса front-end

Для возможности работы с новым полем непосредственно со страниц сайта, дабовляем в файл components/com_content/views/article/tmpl/form.php:

<table class=»adminform»>
<tbody>
<tr>
<td>Новое поле:</td>
<td><input id=»new_field» class=»inputbox» maxlength=»255″ name=»new_field» size=»40″ type=»text» value=»<php echo  $row->new_field; ?>» /></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

3. Работа с базой данных

Нам надо в таблице #_content добавить новое поле. Я сделал это через phpMyAdmin. Зашел в таблицу #_content и сделал запрос:

ALTER TABLE jos_content ADD new_field VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL

Только примите во внимание что я добавляю поле с названием new_field, если выбудете добавлять с иным название, то вам надо поменять во всем коде его название!

4. Вытаскивание данных

Открываем файл libraries/joomla/database/table/content.php , находим строку class JTableContent extends JTable и добавляем свойство var $new_field = null;

class JTableContent extends JTable {
/** @var string This is our new field */
var $new_field = null;
/** @var int Primary key */
var $id = null;
/** @var string */
var $title = null;

5. Изменение модели компонента

В папке components/com_content/models расположены несколько файлов, функциональное назначение которых отражено в их названии. Например, category.php содержит код отвечающего за вывод данных в формате списка/блога. В случае использования данных из нового поля вне пределов страницы материала/статьи, за которую отвечает файл article.php который не требует модификаций, необходимо будет внести изменения в запрос для выборки из таблицы . Проще всего это сделать найдя в нужном файле текст a.title_alias и добавив в список столбцов a.new_field .

Для категорий в файла category.php найти текст:

$query = ‘SELECT cc.title AS category, a.id, a.title, a.alias, a.title_alias, a.introtext, …

И вставить a.new_field:

$query = ‘SELECT cc.title AS category, a.id, a.title, a.alias, a.title_alias, a.new_field, a.introtext, …

6. Вывод нового поля

Для вывода нового поля в самом материале необходимо открыть файл components/com_content/views/article/tmpl/default.php и, добавив в него код, в том месте где хотите его видеть:

<?php echo $this->article->new_field; ?>

Для вывода в списке материалов категории, надо в файле components/com_content/views/category/default_items.php добавить новый столбик в таблице, в верхней стоке будет название, а в строке вывода добавить код:

<?php echo $this->item->new_field; ?>

Ну все, теперь должно все заработать и не забудьте отчистить кэшь 😉

Если у кого что то не получиться, задавайте вопросы, помогу по мере свободного времени.

43 комментария

  1. Здравствуйте!
    Сделал все ок, только вот как сделать если цена прописано тогда выводилось, а если нет то пусто!
    чтобы контейнер div выводился при условии?
    заранее спасибо за совет!
    вот мой div
    Цена: article->new_field; ?>

  2. Спасибо, огромное. Все доходчиво и понятно!
    В back-end поле появилось, сохраняется и обрабатывается. Но вот на сайте не выводится! Шаблон Artisteer. Можете прокоментировать? Буду признателен.

      • Наберусь наглости, и спрошу: «Если есть возможность, могу ли просить Вас глянуть папку шаблона com_content. Может смогли бы точно указать куда вставить вывод. Очень надо разобраться, а с шаблоном Arteester как-то не складывается.»
        Заранее большое , нет, огромное СПАСИБО!

          • Скажите, а как можно организовать вывод значения не через шаблон, а непосредственно в теле самого материала? Цель вывести значение в середине текста.
            Подскажите идею или код. Спасибо.

  3. Благодарю, а то я сломал голову как это сделать. Поле вывел а данные в базу добавить не смог

  4. Добрый день!
    Не посдкажите, как можно произвести сортировку по вновь добавленному полю?

  5.  да, все так, joomla 1.5 я делала для комонента k2, меняя аналогично, естественно, все получилось хорошо, только вт после редактирования значение исчезает.

      •  Да, работает, в базе есть, так как если не редактировать материал, то все нормально выводит в статье каждый раз.

          •  Буду смотреть. Хоть вроде все так. Еще, если можно, вопрос, чтобы эти поля не выводились во всех категориях, как мне прописать условие? Откуда я узнаю id категории (мне нужно только 1 категория)?

          • как не выводить во всех категориях, не разбирался,а вот узнать ID категории, зайди в админке в менеджер категорий, последний столбец справа его ID

  6. Согласная с Skoro3662, заполняю поле в форме, сохраняю статью, птом если мне надо ее открдактировать — вхожу — поля пустые. Почему-то значения не сохраняются. Подскажите, как исправить?

  7. Все разобрался я просто пункт 4 не сохранил! Спасибо огромное великолепная статья! Очень помогла решить одну проблему =)

  8. Добрый день! Очень интересная статья. Только вот у меня при внесении данных во вновь созданное  поле и после сохранении нового нового материала. В таблицу content в новое поле не чего не записывает. Подскажите пожалуйста как записать данные и нового поля в таблицу content БД.

  9. Здравствуйте!
    В редакторе материала всегда присутствует надпись:php echo $row->new_field; ?>
    как ее убрать? Или как сделать так, чтобы там отображалось именно то, что было введено туда заранее? (если ввести туда например *ааа*, то на сайте будет отображаться всё ок, но зайдя на страницу редактирования заново, опять будет *php echo $row->new_field; ?>*

  10. А как вывести из админки (при добавлении материала) поле псевдоним (url)?
    При добавлении материала не из админки нет такого поля, а хочется!

  11. Спустя пару часов ковыряния нашол решение, оно правда не особо эстетичное и может убить очистку кода гдето и в других местах сайта, вобщем юзаем на свой страх и риск.

    /libraries/joomla/filter/filterinput.php строка 197.

    $source[$key] = $filter->_remove($filter->_decode($value));
    заменяем на:
    $result = $source;

    Версия Joomla! 1.5.22 Stable

  12. Добавил в настройки материала поле textarea, которое у меня предназначается для вставки кода карты гугла или ядекса, но обнаружил что при сохранении материала html код который находится в етом поле вырезается(в базу попадает уже обрезанный). Как отключить очистку кода в етом поле, или вобще для всех полей.

  13. Здравствуйте, я добавил новое поле, теперь хочу вывести данные по добавленному полю. Например select * from jos_content where new_field = ‘asus’. Как сделать, где запрос писать?

    • $file = JRequest::getVar( 'filename', '', 'files', 'array' );
      if($file['size'] > 3*1024*1024 )
      $msg = JText::_( 'File more than 3Mb' );
      else
      {
      $filepath="tmp//import.txt";
      if (!JFile::upload($file['tmp_name'], $filepath))
      $msg='Can\'t save file '.$filepath;
      }

      Сначала заполняется ассоциативный массив данными о файле через JRequest::getVar, где filename — имя поля формы, отвечающего за передачу файла. Затем проверяем что файл допустимого размера (меньше 3 мб). И затем через JFile::upload сохраняем файл с именем, заданным в переменной $filepath.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *