Дополнительное поле в статьях

Тема в разделе "InstantCMS", создана пользователем AlexV, 3 апр 2013.

  1. AlexV

    AlexV

    Регистрация:
    21 мар 2013
    Сообщения:
    79
    Симпатии:
    32
    Привет! По просьбе oPPPs, делюсь гайдом, как создать дополнительное поле для компонента "Статьи".

    1. Редактируем базу
    Необходимо добавить новую строчку в cms_content. Назовем ее istochnik.
    Заходим в базу данных.
    Открываем cms_content и добавляем новую строку со следующими параметрами:
    Код:
    поле istochnik
    Тип Varchar
    длина значения 200
    по умолчанию нет
    Сравнение cp1251_general_ci
    Все работы с базой закончены.

    2. Открываем файл frontentd.php из папки components/content
    находим код, примерно строка 173 после
    PHP:
    $smarty->assign('showdate'$showdate);
    $smarty->assign('showcomm'$showcomm);
    $smarty->assign('pagetitle'$pagetitle);
    Добавляем
    PHP:
    $smarty->assign('istochnik'$istochnik);[PHP]
    находим кодпримерно строка 428 после 
    [PHP
    $smarty->assign('cfg'$cfg);
    $smarty->assign('pubcats'$pubcats);
    $smarty->assign('pagetitle'$pagetitle);
    Добавляем
    PHP:
    $smarty->assign('istochnik'$istochnik);
    находим код, примерно строка 448
    PHP:
    $article['user_id']             = $mod['user_id'] ? $mod['user_id'] : $user_id;
    $article['title']               = $inCore->request('title''str''');
    Добавляем
    PHP:
    $article['istochnik']               = $inCore->request('istochnik''str''');
    Находим код, примерно строка 470
    PHP:
    $article['showtitle']           = $do=='editarticle' $mod['showtitle'] : 1;
    $article['meta_desc']           = strtolower($article['title']);
    Добавляем
    PHP:
    $article['istochnik']           = strtolower($article['istochnik']);
    Сохраняем файл

    3. Далее открываем файл model.php из папки components/content
    Находим код, примерно строка 708
    Код:
    	 
    $sql = "INSERT INTO cms_content (category_id, user_id, pubdate, enddate, 
    										 is_end, title, description, content,
    										 published, hits, meta_desc, meta_keys,
    										 showtitle, showdate, showlatest,
    Добавляем istochnik после title, должно получиться следующее
    Код:
    	 
    $sql = "INSERT INTO cms_content (category_id, user_id, pubdate, enddate, 
    										 is_end, title, istochnik, description, content,
    										 published, hits, meta_desc, meta_keys,
    										 showtitle, showdate, showlatest,
    Находим код, примерно строка 715
    PHP:
    '{$article['is_end']}''{$article['title']}''{$article['description']}''{$article['content']}''{$article['published']}'0,/[PHP]
    и добавляем
    [PHP]'{$article['istochnik']}'
    после
    PHP:
    '{$article['title']}'
    должно получиться следующее:
    PHP:
    '{$article['is_end']}''{$article['title']}''{$article['istochnik']}''{$article['description']}''{$article['content']}''{$article['published']}'0,
    Находим код, строка примерно 762
    PHP:
    $sql "UPDATE cms_content
                    SET category_id = 
    {$article['category_id']},
                        pubdate = '
    {$article['pubdate']}',
                        enddate = '
    {$article['enddate']}',
                        is_end = '
    {$article['is_end']}',
                        title='
    {$article['title']}',
    в предпоследнюю строчку добавляем
    PHP:
    istochnik='{$article['istochnik']}' 
    должно получиться следующее:
    PHP:
    $sql "UPDATE cms_content
                    SET category_id = 
    {$article['category_id']},
                        pubdate = '
    {$article['pubdate']}',
                        enddate = '
    {$article['enddate']}',
                        is_end = '
    {$article['is_end']}',
                        istochnik='
    {$article['istochnik']}',
                        title='
    {$article['title']}',
    Все сохраняем файл, основная работа закончена, теперь осталось сделать вывод нового поле.

    4. Открываем файл com_content_edit.tpl по умолчанию он находиться в папки templates/_default_/components
    этот файл отвечает за добавления/редактирования статей пользователей.
    В нужное место вставляем:

    Для добавления поля
    HTML:
    <tr>
    <td width="230" valign="top">
    <strong>Источник:</strong>
    <span class="hinttext">{$LANG.SHOW_ON_SITE}</span>
    </td>
    <td valign="top">
    <input name="istochnik" type="istochnik" class="text-input" id="title" style="width:350px" value="{$mod.istochnik|escape:'html'}" />
    </td>
    </tr>
    Если, вы планируете, что бы пользователь в это поле вставлял с ссылку на другой сайт, тогда замените
    HTML:
    :
    <span class="hinttext">{$LANG.SHOW_ON_SITE}</span>
    
    На это правило
    HTML:
    <span class="hinttext">Добавляйте ссылку без htpp://</span>
    Все с этим файлом мы закончили, теперь поле выводиться при добавлении/редактировании статьи.

    5. Далее нам необходимо сделать вывод этого поля при чтении статьи

    Для этого открываем файл com_content_read.tpl по умолчанию он находиться в папки templates/_default_/components
    и в нужном нам месте вставляем
    Если необходимо просто текстом
    PHP:
    {$article.istochnik}
    Если необходимо ссылкой
    PHP:
    <a href="http://{$article.istochnik}">{$article.istochnik}</a>
    6. Если необходимо это поле редактировать через админ панель.
    Открываем файл content.php из папки admin/applets
    Находим код, примерно строка 248
    PHP:
    :
     
    $id                        $inCore->request('id''int'0);
    $article['category_id']    = $inCore->request('category_id''int'1);
    $article['title']          = $inCore->request('title''str');
    И добавляем следующую функцию
    PHP:
    $article['istochnik']          = $inCore->request('istochnik''str');
    у нас должно получиться
    PHP:
    $id                        $inCore->request('id''int'0);
    $article['category_id']    = $inCore->request('category_id''int'1);
    $article['title']          = $inCore->request('title''str');
    $article['istochnik']          = $inCore->request('istochnik''str');
    Находим код, примерно строка 342
    PHP:
    if ($do == 'submit'){
    $article['category_id']     = $inCore->request('category_id''int'1);
    $article['title']           = $inCore->request('title''str');
    И добавляем следующую функцию
    PHP:
    $article['istochnik']          = $inCore->request('istochnik''str');
    у нас должно получиться
    PHP:
    if ($do == 'submit'){
    $article['category_id']     = $inCore->request('category_id''int'1);
    $article['title']           = $inCore->request('title''str');
    $article['istochnik']           = $inCore->request('istochnik''str');
    И последнее
    после кода, примерно строка 537
    PHP:
    <div><strong>Теги статьи</strong></div>
    <div><input name="tags" type="text" id="tags" style="width:99%" value="<?php if (isset($mod['id'])) { echo cmsTagLine('content'$mod['id'], false); } ?>" /></div>
    Добавляем следующее
    PHP:
    <div><strong>Источник</strong></div>
    <div><input name="istochnik" type="istochnik" id="istochnik" style="width:100%" value="<?php echo @$mod['istochnik'];?>" /></div>
    Все. готово. можно тестировать
     
    oPPPs нравится это.
  2. oPPPs

    oPPPs

    Регистрация:
    8 сен 2012
    Сообщения:
    266
    Симпатии:
    245
    AlexV

    Это под какую версию? 1.9?
    Под 1.10.1 не подходит. Есть проблемка
     
  3. RomanOlegovich

    RomanOlegovich

    Регистрация:
    22 фев 2013
    Сообщения:
    14
    Симпатии:
    3
    под 1.10 не идёт!!
     
  4. dralyuk

    dralyuk

    Регистрация:
    28 ноя 2012
    Сообщения:
    15
    Симпатии:
    0
    Да, для 1.9 - идеально стало.
     
  5. oPPPs

    oPPPs

    Регистрация:
    8 сен 2012
    Сообщения:
    266
    Симпатии:
    245
    Для 1.9 этот же гайд имеется на сайте инстанта. К сожалению ничего нового.
    Но 1.9 по ряду причин нет желания использовать.
     
  6. Free_GM

    Free_GM

    Регистрация:
    31 авг 2013
    Сообщения:
    3
    Симпатии:
    0
    Кто нибудь нашел вариант для 1.10??
     
  7. slavikolp

    slavikolp

    Регистрация:
    8 июл 2014
    Сообщения:
    27
    Симпатии:
    3
    Уже давно плагин для этого используется