0 Пользователей и 1 Гость просматривают эту тему.
  • 173 Ответов
  • 30580 Просмотров
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Помогите разобраться...

Сперва интересует админка и в частности база данных. Под все расширения, теперь одна таблица - jos__extensions.
Но самое непонятное тут:

поле - manifest_cache
Код
a:11:{s:6:"legacy";b:0;s:4:"name";s:14:"PhocaGuestbook";s:4:"type";s:9:"component";s:12:"creationDate";s:10:"04/10/2010";s:6:"author";s:26:"Jan Pavelka (www.phoca.cz)";s:9:"copyright";s:11:"Jan Pavelka";s:11:"authorEmail";s:0:"";s:9:"authorUrl";s:12:"www.phoca.cz";s:7:"version";s:11:"2.0.0 Beta1";s:11:"description";s:15:"Phoca Guestbook";s:5:"group";s:0:"";}

и поле - params
Код
{"display_title_form":"2","display_name_form":"2","display_email_form":"1","display_website_form":"0","display_content_form":"2","enable_editor":"1","display_path_editor":"1","display_form":"0","form_position":"1","editor_width":"350","editor_height":"200","table_width":"350","predefined_name":"","username_or_name":"0","disable_user_check":"0","registered_users_only":"0","review_item":"1","send_mail":"0","display_name":"1","display_email":"0","display_website":"1","date_format":"DATE_FORMAT_LC","font_color":"#000000","second_font_color":"#dddddd","background_color":"#C8DFF9","border_color":"#E6E6E6","default_pagination":"10","pagination":"5,10,15,20,50","pagination_hide_all":"1","forbidden_word_filter":"","forbidden_whole_word_filter":"","ip_ban":"","max_char":"2000","max_url":"5","deny_url_words":"","enable_captcha":"1","enable_captcha_users":"0","standard_captcha_chars":"1,2,3,4,5,6,7,8,9, a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z, A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z","math_captcha_chars":"1,2,3,4,5,6,7,8,9, a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z, A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z","ttf_captcha_chars":"1,2,3,4,5,6,7,8,9, a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z, A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z","recaptcha_publickey":"","recaptcha_privatekey":"","enable_html_purifier":"1"}
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #1 : 03.01.2011, 04:24:58 »
Итак продолжим операцию... ТЗ простое... Нужно всего лишь заполнять, удалять и редактировать строки однои таблицы. Поля таблицы:

Код

CREATE TABLE IF NOT EXISTS `jos_advsearch` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemid` int(11) NOT NULL,
  `articleid` int(11) NOT NULL,
  `title` varchar(200) NOT NULL,
  `yearwrite` int(11) NOT NULL,
  `number` varchar(255) NOT NULL,
  `author` varchar(200) NOT NULL,
  `keywords` text NOT NULL,
  `published` tinyint(2) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`),
  UNIQUE KEY `id_3` (`id`),
  KEY `id_2` (`id`),
  KEY `id_4` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;


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

Фронтэнд у меня отлично работает... Писал без MVC, так как задача достаточно специфическая, по сути дела, просто расширенный фильтр(поиск). Фильтр ищет по полям таблицы. Т.к. в контенте не указаны иногда поле автор, ключевые слова и прочие. Возможно это будет несколько неправильно и может неудобно вести контент и заполнять отдельно таблицу. Но, так зато будет работать быстрее. И не нужно будет патчить, добавлять новые поля и редактировать файлы, которые можно случайно при обновлении потрать. Кроме того, это даст возможно некоторые новые возможности.

фронэнд тут:
vmpr.ru

В поиске, если что-то набрать выводиться результат. С постраничной навигацией проблемы. Теряются элементы запроса... Таким образом на второй странице уже неправильный запрос SQL. И с работой в режиме ЧПУ, с постраничной навигацией  были проблемы. Но, это не смертельно важно щас...
« Последнее редактирование: 03.01.2011, 05:24:46 от dremora »
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #2 : 03.01.2011, 06:48:49 »
Легализация

переименовал уже сделанное в \components\temp. Сперва нам нужно, установить компонент... Что почему то у меня не получилось...
Для образца я разобрал XML - PhocaGuestbook ( http://www.phoca.cz/download/category/5-phoca-guestbook-component ). Он кстати уже установлен и работает на этом саите.

Код
<?xml version="1.0" encoding="utf-8"?>
<extension method="upgrade" type="component" version="1.6.0">
<name>PhocaGuestbook</name>
<author>Jan Pavelka (www.phoca.cz)</author>
<creationDate>02/12/2010</creationDate>
<authorEmail></authorEmail>
<authorUrl>www.phoca.cz</authorUrl>
<copyright>Jan Pavelka</copyright>
<license>GNU/GPL</license>
<version>2.0.0 Beta2</version>
<description>Phoca Guestbook</description>

<install>
<sql>
<file driver="mysql" charset="utf8">install.sql</file>
</sql>
</install>

<uninstall>
<sql>
<file driver="mysql" charset="utf8">uninstall.sql</file>
</sql>
</uninstall>

<installfile>install.phocaguestbook.php</installfile>

<uninstallfile>uninstall.phocaguestbook.php</uninstallfile>

<files folder="site">
<filename>controller.php</filename>
<filename>index.html</filename>
<filename>metadata.xml</filename>
<filename>phocaguestbook.php</filename>
<filename>router.php</filename>
<folder>assets</folder>
<folder>controllers</folder>
<folder>helpers</folder>
<folder>models</folder>
<folder>views</folder>
</files>

<languages>
<language tag="en-GB" client="site">language/en-GB/en-GB.com_phocaguestbook.ini</language>
<language tag="en-GB" client="site">language/en-GB/en-GB.com_phocaguestbook.sys.ini</language>
</languages>

<administration>
<menu img="components/com_phocaguestbook/assets/images/icon-16-pgb-menu.png" link="option=com_phocaguestbook">COM_PHOCAGUESTBOOK</menu>
<submenu>
<menu img="components/com_phocaguestbook/assets/images/icon-16-pgb-menu-cp.png" alt="COM_PHOCAGUESTBOOK_CONTROLPANEL" view="phocaguestbookcp" link="option=com_phocaguestbook">COM_PHOCAGUESTBOOK_CONTROLPANEL</menu>
<menu img="components/com_phocaguestbook/assets/images/icon-16-pgb-menu-item.png" alt="COM_PHOCAGUESTBOOK_ITEMS" view="phocaguestbooks" link="option=com_phocaguestbook&amp;amp;view=phocaguestbooks">COM_PHOCAGUESTBOOK_ITEMS</menu>
<menu img="components/com_phocaguestbook/assets/images/icon-16-pgb-menu-guestbook.png" alt="COM_PHOCAGUESTBOOK_GUESTBOOKS" view="phocaguestbookbs" link="option=com_phocaguestbook&amp;amp;view=phocaguestbookbs">COM_PHOCAGUESTBOOK_GUESTBOOKS</menu>
<menu img="components/com_phocaguestbook/assets/images/icon-16-pgb-menu-info.png" alt="COM_PHOCAGUESTBOOK_INFO" view="phocaguestbookin" link="option=com_phocaguestbook&amp;amp;view=phocaguestbookin">COM_PHOCAGUESTBOOK_INFO</menu>
</submenu>

<files folder="admin">
<filename>access.xml</filename>
<filename>config.xml</filename>
<filename>controller.php</filename>
<filename>index.html</filename>
<filename>install.bak.sql</filename>
<filename>install.phocaguestbook.php</filename>
<filename>install.sql</filename>
<filename>phocaguestbook.php</filename>
<filename>phocaguestbook.xml</filename>
<filename>uninstall.phocaguestbook.php</filename>
<filename>uninstall.sql</filename>
<folder>assets</folder>
<folder>controllers</folder>
<folder>help</folder>
<folder>helpers</folder>
<folder>models</folder>
<folder>tables</folder>
<folder>views</folder>
</files>

<languages>
<language tag="en-GB">language/en-GB/en-GB.com_phocaguestbook.ini</language>
<language tag="en-GB">language/en-GB/en-GB.com_phocaguestbook.sys.ini</language>
</languages>

</administration>
</extension>


Вот моё:
Код
<?xml version="1.0" encoding="utf-8"?>
<extension method="upgrade" type="component" version="1.6.0">
<name>AdvSearch</name>
<author>dremora</author>
<creationDate>03/01/2011</creationDate>
<authorEmail></authorEmail>
<authorUrl></authorUrl>
<copyright>dremora</copyright>
<license>GNU/GPL</license>
<version>1.0.0 Beta</version>
<description>AdvSearch for vmpr.ru</description>

<install>
<sql>
<file driver="mysql" charset="utf8">install.sql</file>
</sql>
</install>

<install>
<sql>
<file driver="mysql" charset="utf8">install.sql</file>
</sql>
</install>

<installfile>install.advsearch.php</installfile>

<uninstallfile>uninstall.advsearch.php</uninstallfile>

<files folder="site">
<filename>advsearch.php</filename>
</files>

<languages>
<language tag="en-GB" client="site">language/en-GB/en-GB.com_advsearch.ini</language>
<language tag="en-GB" client="site">language/en-GB/en-GB.com_advsearch.sys.ini</language>
</languages>

<administration>
<menu img="components/com_advsearch/assets/images/icon-16-pgb-menu.png" link="option=com_phocaguestbook">AdvSearch</menu>

<files folder="admin">
<filename>access.xml</filename>
<filename>config.xml</filename>
<filename>controller.php</filename>
<filename>index.html</filename>
<filename>install.bak.sql</filename>
<filename>install.advsearch.php</filename>
<filename>install.sql</filename>
<filename>advsearch.php</filename>
<filename>advsearch.xml</filename>
<filename>uninstall.advsearch.php</filename>
<filename>uninstall.sql</filename>
<folder>assets</folder>
<folder>controllers</folder>
<folder>help</folder>
<folder>helpers</folder>
<folder>models</folder>
<folder>tables</folder>
<folder>views</folder>
</files>

<languages>
 <language tag="en-GB" client="site">language/en-GB/en-GB.com_advsearch.ini</language>
 <language tag="en-GB" client="site">language/en-GB/en-GB.com_advsearch.sys.ini</language>
</languages>


</administration>

</extension>

Создал всё что он требует пустое(без внутреннего содержимого )...



И видимо, потому, что пустое установка дальше не пошла...



---после чашки чаю и немного времени---

Три ошибки в установщике исправил, тем не менее, ошибка 500 сохранилась...

Код
<?xml version="1.0" encoding="utf-8"?>
<extension method="upgrade" type="component" version="1.6.0">
<name>AdvSearch</name>
<author>dremora</author>
<creationDate>03/01/2011</creationDate>
<authorEmail></authorEmail>
<authorUrl></authorUrl>
<copyright>dremora</copyright>
<license>GNU/GPL</license>
<version>1.0.0 Beta</version>
<description>AdvSearch for vmpr.ru</description>

<install>
<sql>
<file driver="mysql" charset="utf8">install.sql</file>
</sql>
</install>

<uninstall>
<sql>
<file driver="mysql" charset="utf8">uninstall.sql</file>
</sql>
</uninstall>

<installfile>install.advsearch.php</installfile>

<uninstallfile>uninstall.advsearch.php</uninstallfile>

<files folder="site">
<filename>advsearch.php</filename>
<filename>index.html</filename>
</files>

<languages>
<language tag="en-GB" client="site">language/en-GB/en-GB.com_advsearch.ini</language>
<language tag="en-GB" client="site">language/en-GB/en-GB.com_advsearch.sys.ini</language>
</languages>

<administration>
<menu img="components/com_advsearch/assets/images/icon-16-pgb-menu.png" link="option=com_advsearch">AdvSearch</menu>

<files folder="admin">
<filename>access.xml</filename>
<filename>config.xml</filename>
<filename>controller.php</filename>
<filename>index.html</filename>
<filename>install.bak.sql</filename>
<filename>install.advsearch.php</filename>
<filename>install.sql</filename>
<filename>advsearch.php</filename>
<filename>advsearch.xml</filename>
<filename>uninstall.advsearch.php</filename>
<filename>uninstall.sql</filename>
<folder>assets</folder>
<folder>controllers</folder>
<folder>help</folder>
<folder>helpers</folder>
<folder>models</folder>
<folder>tables</folder>
<folder>views</folder>
</files>

<languages>
  <language tag="en-GB" client="site">language/en-GB/en-GB.com_advsearch.ini</language>
  <language tag="en-GB" client="site">language/en-GB/en-GB.com_advsearch.sys.ini</language>
</languages>


</administration>

</extension>
« Последнее редактирование: 03.01.2011, 07:29:54 от dremora »
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #3 : 03.01.2011, 09:02:56 »
Итак... Первыи блин оказался комом... И непонятно, почему не захотел устанавливаться.

Зато по инструкции всё хорошо установилось:
http://docs.joomla.org/Developing_a_Model-View-Controller_%28MVC%29_Component_for_Joomla!1.6_-_Part_01#admin.2Fsql.2Fupdates.2Fmysql.2F0.0.1.sql

По видимому все папки должны обязательно содержать index.html, обязательно не пустые.

UPD

Точно, добавил не пустои index.html ко всему, и всё нормально установилось.
« Последнее редактирование: 03.01.2011, 09:09:25 от dremora »
Всё что не анархия, то фашизм...
*

b2z

  • Глобальный модератор
  • 7101
  • 769 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #4 : 03.01.2011, 12:17:23 »
Нового в 1.6 для разработчика много всего. Особенно это касается работой с формами. В соседней теме обсуждаем.
*

SDKiller

  • Живу я здесь
  • 2706
  • 329 / 5
  • ...ergo sum
Re: Написание компонента для Joomla 1.6
« Ответ #5 : 03.01.2011, 12:57:38 »

Но самое непонятное тут:

поле - manifest_cache
Код
a:11:{s:6:"legacy";b:0;s:4:"name";s:14:"PhocaGuestbook";s:4:"type";s:9:"component";s:12:"creationDate";s:10:"04/10/2010";s:6:"author";s:26:"Jan Pavelka (www.phoca.cz)";s:9:"copyright";s:11:"Jan Pavelka";s:11:"authorEmail";s:0:"";s:9:"authorUrl";s:12:"www.phoca.cz";s:7:"version";s:11:"2.0.0 Beta1";s:11:"description";s:15:"Phoca Guestbook";s:5:"group";s:0:"";}


Это массив, преобразованный в строку функцией serialize()

Разворачивается обратно в массив функцией unserialize()
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #6 : 03.01.2011, 13:56:57 »
Я продолжу постить сюда... Только чуть позже (спать хочу), в стиле ежедневника/блога. Потом можно отредактировать и выделить главные моменты.
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #7 : 04.01.2011, 05:12:53 »
Запускаем админку...

Итак... Дальше судя по мануалу становиться немного непонятно...

http://docs.joomla.org/Developing_a_Model-View-Controller_%28MVC%29_Component_for_Joomla!1.6_-_Part_06

Нужно создавать на фронте определённые папки и фаилы. Только тогда по идее мы сможем подключить таблицу.

.../administrator/components/com_advsearch/tables/advsearch.php
Код
<?php
// No direct access
defined('_JEXEC') or die('Restricted access');
 
// import Joomla table library
jimport('joomla.database.table');
 
/**
 * Hello Table class
 */
class AdvSearchTableAdvSearch extends JTable
{
        /**
         * Constructor
         *
         * @param object Database connector object
         */
        function __construct(&$db)
        {
                parent::__construct('#__advsearch', 'id', $db);
        }
}

Что делать, если я разрабатывал фронтэнд без MVC?
« Последнее редактирование: 04.01.2011, 08:23:49 от dremora »
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #8 : 04.01.2011, 07:28:22 »
Итак... бекэнд вроде завёлся... Фаил, для работы с БД, описанныи выше, всё-же заработал.

http://docs.joomla.org/Developing_a_Model-View-Controller_%28MVC%29_Component_for_Joomla!1.6_-_Part_07

заполняем
...\administrator\components\com_advsearch\advsearch.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla controller library
jimport('joomla.application.component.controller');
 
// Get an instance of the controller prefixed by HelloWorld
$controller = JController::getInstance('AdvSearch');
 
// Perform the Request task
$controller->execute(JRequest::getCmd('task'));
 
// Redirect if set by the controller
$controller->redirect();

?>

заполняем контроллер
...\administrator\components\com_advsearch\controller.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla controller library
jimport('joomla.application.component.controller');
 
/**
 * General Controller of HelloWorld component
 */
class AdvSearchController extends JController
{
        /**
         * display task
         *
         * @return void
         */
        function display($cachable = false)
        {
                // set default view if not set
                JRequest::setVar('view', JRequest::getCmd('view', 'AdvSearch'));
 
                // call parent behavior
                parent::display($cachable);
        }
}

Заполняем представление, оно у нас в данном ТЗ одно лишь.
...\administrator\components\com_advsearch\views\advsearch\view.html.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla view library
jimport('joomla.application.component.view');
 
/**
 * HelloWorlds View
 */
class AdvSearchViewAdvSearch extends JView
{
        /**
         * HelloWorlds view display method
         * @return void
         */
        function display($tpl = null)
        {
                // Get data from the model
                $items = $this->get('Items');
                $pagination = $this->get('Pagination');
 
                // Check for errors.
                if (count($errors = $this->get('Errors')))
                {
                        JError::raiseError(500, implode('<br />', $errors));
                        return false;
                }
                // Assign data to the view
                $this->items = $items;
                $this->pagination = $pagination;
 
                // Display the template
                parent::display($tpl);
        }
}

И шаблон к нему
...\administrator\components\com_advsearch\views\advsearch\tmpl\default.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
 
// load tooltip behavior
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_advsearch'); ?>" method="post" name="adminForm">
        <table class="adminlist">
                <thead><?php echo $this->loadTemplate('head');?></thead>
                <tfoot><?php echo $this->loadTemplate('foot');?></tfoot>
                <tbody><?php echo $this->loadTemplate('body');?></tbody>
        </table>
</form>

Связанные шаблоны, head:
...\administrator\components\com_advsearch\views\advsearch\tmpl\default_head.php

Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
?>
<tr>
        <th width="5">
                <?php echo JText::_('COM_ADVSEARCH_HEADING_ID'); ?>
        </th>
        <th width="20">
                <input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count($this->items); ?>);" />
        </th>                    
        <th>
                <?php echo JText::_('COM_ADVSEARCH_HEADING_ITEMID'); ?>
        </th>
<th>
                <?php echo JText::_('COM_ADVSEARCH_HEADING_ARTICLEID'); ?>
        </th>

<th>
                <?php echo JText::_('COM_ADVSEARCH_HEADING_TITLE'); ?>
        </th>

<th>
                <?php echo JText::_('COM_ADVSEARCH_HEADING_YEARWRITE'); ?>
        </th>

<th>
                <?php echo JText::_('COM_ADVSEARCH_HEADING_NUMBER'); ?>
        </th>

<th>
                <?php echo JText::_('COM_ADVSEARCH_HEADING_AUTHOR'); ?>
        </th>

<th>
                <?php echo JText::_('COM_ADVSEARCH_HEADING_KEYWORDS'); ?>
        </th>

<th>
                <?php echo JText::_('COM_ADVSEARCH_HEADING_PUBLISHED'); ?>
        </th>
</tr>

Связанные шаблоны, body:
...\administrator\components\com_advsearch\views\advsearch\tmpl\default_body.php

Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
?>
<?php foreach($this->items as $i => $item): ?>
        <tr class="row<?php echo $i % 2; ?>">
                <td>
                        <?php echo $item->id; ?>
                </td>
                <td>
                        <?php echo JHtml::_('grid.id', $i, $item->id); ?>
                </td>

                <td>
                        <?php echo $item->itemid; ?>
                </td>

<td>
                        <?php echo $item->articleid ; ?>
                </td>

<td>
                        <?php echo $item->title; ?>
                </td>

<td>
                        <?php echo $item->yearwrite; ?>
                </td>

<td>
                        <?php echo $item->number; ?>
                </td>

<td>
                        <?php echo $item->author; ?>
                </td>

<td>
                        <?php echo $item->keywords; ?>
                </td>

<td>
                        <?php echo $item->published; ?>
                </td>
        </tr>
<?php endforeach; ?>

Связанные шаблоны, foot:
...\administrator\components\com_advsearch\views\advsearch\tmpl\default_foot.php

Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
?>
<tr>
        <td colspan="10"><?php echo $this->pagination->getListFooter(); ?></td>
</tr>

Педжинация почему-то у меня не заработала, потому я её отключил(закоментировал). Будем потом думать почему...
« Последнее редактирование: 04.01.2011, 08:20:58 от dremora »
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #9 : 04.01.2011, 07:49:22 »
Модель к нему:

\administrator\components\com_advsearch\models\advsearch.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import the Joomla modellist library
jimport('joomla.application.component.modellist');
/**
 * HelloWorldList Model
 */
class AdvSearchModelAdvSearch extends JModelList
{
        /**
         * Method to build an SQL query to load the list data.
         *
         * @return      string  An SQL query
         */
        protected function getListQuery()
        {
                // Create a new query object.        
                $db = JFactory::getDBO();
                $query = $db->getQuery(true);
                // Select some fields
                $query->select('id,itemid,articleid,title,yearwrite,number,author,keywords,published');
                // From the hello table
                $query->from('#__advsearch');
                return $query;
        }
}

Итак, всё вроде работает... Кроме "педжинации". Нужен "русик"... Но, я сделал всё на англ. Время перехода на русскии в админке, ещё не пришло.

Удивился, почему в
\administrator\language\en-GB\

нет моих фаилов, которые должны быть после установки...

И пришлось, снова поправить главныи XML фаил.

Код
<?xml version="1.0" encoding="utf-8"?>
<extension method="upgrade" type="component" version="1.6.0">
<name>PhocaGuestbook</name>
<author>Jan Pavelka (www.phoca.cz)</author>
<creationDate>04/10/2010</creationDate>
<authorEmail></authorEmail>
<authorUrl>www.phoca.cz</authorUrl>
<copyright>Jan Pavelka</copyright>
<license>GNU/GPL</license>
<version>2.0.0 Beta1</version>
<description>Phoca Guestbook</description>

<install>
<sql>
<file driver="mysql" charset="utf8">install.sql</file>
</sql>
</install>

<uninstall>
<sql>
<file driver="mysql" charset="utf8">uninstall.sql</file>
</sql>
</uninstall>

<installfile>install.phocaguestbook.php</installfile>

<uninstallfile>uninstall.phocaguestbook.php</uninstallfile>

<files folder="site">
<filename>controller.php</filename>
<filename>index.html</filename>
<filename>metadata.xml</filename>
<filename>phocaguestbook.php</filename>
<filename>router.php</filename>
<folder>assets</folder>
<folder>controllers</folder>
<folder>helpers</folder>
<folder>models</folder>
<folder>views</folder>
</files>

<languages>
<language tag="en-GB" client="site">language/en-GB/en-GB.com_phocaguestbook.ini</language>
<language tag="en-GB" client="site">language/en-GB/en-GB.com_phocaguestbook.sys.ini</language>
</languages>

<administration>
<menu img="components/com_phocaguestbook/assets/images/icon-16-pgb-menu.png" link="option=com_phocaguestbook">COM_PHOCAGUESTBOOK</menu>
<submenu>
<menu img="components/com_phocaguestbook/assets/images/icon-16-pgb-menu-cp.png" alt="COM_PHOCAGUESTBOOK_CONTROLPANEL" view="phocaguestbookcp" link="option=com_phocaguestbook">COM_PHOCAGUESTBOOK_CONTROLPANEL</menu>
<menu img="components/com_phocaguestbook/assets/images/icon-16-pgb-menu-item.png" alt="COM_PHOCAGUESTBOOK_ITEMS" view="phocaguestbooks" link="option=com_phocaguestbook&amp;amp;view=phocaguestbooks">COM_PHOCAGUESTBOOK_ITEMS</menu>
<menu img="components/com_phocaguestbook/assets/images/icon-16-pgb-menu-guestbook.png" alt="COM_PHOCAGUESTBOOK_GUESTBOOKS" view="phocaguestbookbs" link="option=com_phocaguestbook&amp;amp;view=phocaguestbookbs">COM_PHOCAGUESTBOOK_GUESTBOOKS</menu>
<menu img="components/com_phocaguestbook/assets/images/icon-16-pgb-menu-info.png" alt="COM_PHOCAGUESTBOOK_INFO" view="phocaguestbookin" link="option=com_phocaguestbook&amp;amp;view=phocaguestbookin">COM_PHOCAGUESTBOOK_INFO</menu>
</submenu>

<files folder="admin">
<filename>access.xml</filename>
<filename>config.xml</filename>
<filename>controller.php</filename>
<filename>index.html</filename>
<filename>install.bak.sql</filename>
<filename>install.phocaguestbook.php</filename>
<filename>install.sql</filename>
<filename>phocaguestbook.php</filename>
<filename>phocaguestbook.xml</filename>
<filename>uninstall.phocaguestbook.php</filename>
<filename>uninstall.sql</filename>
<folder>assets</folder>
<folder>controllers</folder>
<folder>help</folder>
<folder>helpers</folder>
<folder>models</folder>
<folder>tables</folder>
<folder>views</folder>
</files>

<languages>
<language tag="en-GB">language/en-GB/en-GB.com_phocaguestbook.ini</language>
<language tag="en-GB">language/en-GB/en-GB.com_phocaguestbook.sys.ini</language>
</languages>

</administration>
</extension>

      <languages>
         <language tag="en-GB" client="site">language/en-GB/en-GB.com_phocaguestbook.ini</language>
         <language tag="en-GB" client="site">language/en-GB/en-GB.com_phocaguestbook.sys.ini</language>
      </languages>

должно быть без параметра...

Едем дальше... Язык. Наверное, мы будем к нему ещё возвращаться потом... Кстати не понял, зачем у разработчика com_phocaguestbook ещё есть - en-GB.com_phocaguestbook.sys.ini. Но, с этим мы наверное в будущем разберёмся.

...\administrator\language\en-GB\en-GB.com_advsearch.ini
Код
COM_ADVSEARCH_HEADING_ID="#"
COM_ADVSEARCH_HEADING_ITEMID="ItemID"
COM_ADVSEARCH_HEADING_ARTICLEID="ArticleID"
COM_ADVSEARCH_HEADING_TITLE="Title"
COM_ADVSEARCH_HEADING_YEARWRITE="Year write"
COM_ADVSEARCH_HEADING_AUTHOR="Author"
COM_ADVSEARCH_HEADING_KEYWORDS="Keywords"
COM_ADVSEARCH_HEADING_PUBLISHED="Published"
COM_ADVSEARCH_HEADING_NUMBER="Number"

И результат:



UPD
"педжинация", сама, как-то заработала... Это радует)))
« Последнее редактирование: 04.01.2011, 08:18:20 от dremora »
Всё что не анархия, то фашизм...
*

b2z

  • Глобальный модератор
  • 7101
  • 769 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #10 : 04.01.2011, 10:13:41 »
.sys.ini файлы нужны для локализации админки. Например, для работы с пунктами меню.

Кстати, я заметил, что $db вызывается не по ссылке (не используется &). Интересно, это ошибка или так и должно быть? Походу так и должно быть, потому что во всех примерах JFactory используется без &
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #11 : 04.01.2011, 10:56:17 »
.sys.ini файлы нужны для локализации админки. Например, для работы с пунктами меню.

Кстати, я заметил, что $db вызывается не по ссылке (не используется &). Интересно, это ошибка или так и должно быть? Походу так и должно быть, потому что во всех примерах JFactory используется без &
Я фронт делал без ссылки... Хотя, ссылка это полезная вещь... Т.е. работает и так и так...

В общем накуралесил я немного... Это у нас - advsearchs - представление и контроллер. А advsearch будет - редактирование или создание нового. Можно, конечно обоити(оставить) это и сделать через AJAX.

Когда посплю продолжу остался финал.
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #12 : 07.01.2011, 13:23:22 »
Итак поправил, части(advsearch и advsearchs).

Но почему-то нет тулбара...

Для тулбара прописал:
...\administrator\components\com_advsearch\views\advsearchs\view.html.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla view library
jimport('joomla.application.component.view');
 
/**
 * HelloWorlds View
 */
class AdvSearchViewAdvSearchs extends JView
{
        /**
         * HelloWorlds view display method
         * @return void
         */
        function display($tpl = null)
        {
                // Get data from the model
                $items = $this->get('Items');
                $pagination = $this->get('Pagination');
 
                // Check for errors.
                if (count($errors = $this->get('Errors')))
                {
                        JError::raiseError(500, implode('<br />', $errors));
                        return false;
                }
                // Assign data to the view
                $this->items = $items;
                $this->pagination = $pagination;
 
                // Display the template
                parent::display($tpl);
        }

protected function addToolBar()
        {
                JToolBarHelper::title(JText::_('COM_ADVSEARCH_TITLE'));
                JToolBarHelper::deleteListX('', 'advsearchs.delete');
                JToolBarHelper::editListX('advsearch.edit');
                JToolBarHelper::addNewX('advsearch.add');
        }

protected function setDocument()
        {
                $document = JFactory::getDocument();
                $document->setTitle(JText::_('COM_ADVSEARCH_ADMINISTRATION'));
        }
}

Добавил в язык нужное и в "sys" то-же. Может быть дело в кнопках, но title(заголовок компонента) почему-то то-же не выводиться.

Думаю почему... У PhocaGuestbook такая же запись(синтаксис), но почему-то всё работает.
Всё что не анархия, то фашизм...
*

zuich

  • Новичок
  • 9
  • 3 / 0
Re: Написание компонента для Joomla 1.6
« Ответ #13 : 07.01.2011, 13:38:55 »
У вас  "addToolBar()" в  "function display" не прописана
*

b2z

  • Глобальный модератор
  • 7101
  • 769 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #14 : 07.01.2011, 13:52:32 »
У вас  "addToolBar()" в  "function display" не прописана
Точнее вот так в display():
$this->addToolBar();

Здесь есть немного основной инфы на русском, а здесь достаточно много на английском.



*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #15 : 07.01.2011, 13:54:23 »
оу... точно, спс

"+" в карму...

Беда, я немного невнимательный...

UPD

Теперь тулбар заработал...
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #16 : 10.01.2011, 10:37:12 »
Есть одна проблема, которую  никак не могу решить... Казалось бы, опять невнимательность и опечатка... Но, после того, как добавляю или редактирую запись. Когда, жму отмену или сохранить.

Попадаю на - [домен]/administrator/index.php?option=com_advsearch&view=advsearches
И естественно получаю ошибку - 500

А должно быть:
[домен]/administrator/index.php?option=com_advsearch&view=advsearchs

Много раз раз проверял код через поиск -  "advsearches". А так-же фаилы и папки на - "advsearches". Сверился полностью с мануалом. И вроде всё верно. Но, тем не менее, как, чья-то нехороша шутка - не работает. Удаляет хорошо... А добавить или отредактировать запись не получается.

Скорее всего ошибка в контроллере или в модели. Но там её нет..
...\administrator\components\com_advsearch\models\advsearch.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla modelform library
jimport('joomla.application.component.modeladmin');
 
/**
 * HelloWorld Model
 */
class AdvSearchModelAdvSearch extends JModelAdmin
{
        /**
         * Returns a reference to the a Table object, always creating it.
         *
         * @param       type    The table type to instantiate
         * @param       string  A prefix for the table class name. Optional.
         * @param       array   Configuration array for model. Optional.
         * @return      JTable  A database object
         * @since       1.6
         */
        public function getTable($type = 'AdvSearch', $prefix = 'AdvSearchTable', $config = array())
        {
                return JTable::getInstance($type, $prefix, $config);
        }
        /**
         * Method to get the record form.
         *
         * @param       array   $data           Data for the form.
         * @param       boolean $loadData       True if the form is to load its own data (default case), false if not.
         * @return      mixed   A JForm object on success, false on failure
         * @since       1.6
         */
        public function getForm($data = array(), $loadData = true)
        {
                // Get the form.
                $form = $this->loadForm('com_advsearch.advsearch', 'advsearch', array('control' => 'jform', 'load_data' => $loadData));
                if (empty($form))
                {
                        return false;
                }
                return $form;
        }
        /**
         * Method to get the data that should be injected in the form.
         *
         * @return      mixed   The data for the form.
         * @since       1.6
         */
        protected function loadFormData()
        {
                // Check the session for previously entered form data.
                $data = JFactory::getApplication()->getUserState('com_advsearch.edit.advsearch.data', array());
                if (empty($data))
                {
                        $data = $this->getItem();
                }
                return $data;
        }
}

...\administrator\components\com_advsearch\controllers\advsearch.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla controllerform library
jimport('joomla.application.component.controllerform');
 
/**
 * HelloWorld Controller
 */
class AdvSearchControllerAdvSearch extends JControllerForm
{
}

...\administrator\components\com_advsearch\controllers\advsearch.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla controlleradmin library
jimport('joomla.application.component.controlleradmin');
 
/**
 * HelloWorlds Controller
 */
class AdvSearchControllerAdvSearchs extends JControllerAdmin
{
        /**
         * Proxy for getModel.
         * @since       1.6
         */
        public function getModel($name = 'AdvSearch', $prefix = 'AdvSearchModel')
        {
                $model = parent::getModel($name, $prefix, array('ignore_request' => true));
                return $model;
        }
}
Всё что не анархия, то фашизм...
*

b2z

  • Глобальный модератор
  • 7101
  • 769 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #17 : 10.01.2011, 11:07:52 »
dremora - покажите код вида AdvSearchViewAdvSearch и шаблона edit.php

Я так понимаю, что view=advsearchs - это список, а view=advsearch - это одна запись?
А то у Вас написано
Цитировать
попадаю на - [домен]/administrator/index.php?option=com_advsearch&view=advsearches
view=advsearches - ? Тут разве не view=advsearchs?

и

Цитировать
А должно быть:
[домен]/administrator/index.php?option=com_advsearch&view=advsearchs
view=advsearchs - ? Тут по идее должно быть advsearch.
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #18 : 10.01.2011, 11:25:03 »
dremora - покажите код вида AdvSearchViewAdvSearch и шаблона edit.php

Код
<?php
// No direct access
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_advsearch&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="advsearch-form">
        <fieldset class="adminform">
                <legend><?php echo JText::_( 'COM_HELLOWORLD_HELLOWORLD_DETAILS' ); ?></legend>
                <ul class="adminformlist">
<?php foreach($this->form->getFieldset() as $field): ?>
                        <li><?php echo $field->label;echo $field->input;?></li>
<?php endforeach; ?>
                </ul>
        </fieldset>
        <div>
                <input type="hidden" name="task" value="advsearch.edit" />
                <?php echo JHtml::_('form.token'); ?>
        </div>
</form>

Я так понимаю, что view=advsearchs - это список, а view=advsearch - это одна запись?

Да вы всё правильно поняли...
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #19 : 10.01.2011, 11:26:13 »
код вида:

Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla view library
jimport('joomla.application.component.view');
 
/**
 * HelloWorld View
 */
class AdvSearchViewAdvSearch extends JView
{
        /**
         * display method of Hello view
         * @return void
         */
        public function display($tpl = null)
        {
                // get the Data
                $form = $this->get('Form');
                $item = $this->get('Item');
 
                // Check for errors.
                if (count($errors = $this->get('Errors')))
                {
                        JError::raiseError(500, implode('<br />', $errors));
                        return false;
                }
                // Assign the Data
                $this->form = $form;
                $this->item = $item;
 
                // Set the toolbar
                $this->addToolBar();
 
                // Display the template
                parent::display($tpl);
        }
 
        /**
         * Setting the toolbar
         */
        protected function addToolBar()
        {
                JRequest::setVar('hidemainmenu', true);
                $isNew = ($this->item->id == 0);
                JToolBarHelper::title($isNew ? JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_NEW') : JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_EDIT'));
                JToolBarHelper::save('advsearch.save');
                JToolBarHelper::cancel('advsearch.cancel', $isNew ? 'JTOOLBAR_CANCEL' : 'JTOOLBAR_CLOSE');
        }
}
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #20 : 10.01.2011, 11:34:37 »
view=advsearchs - ? Тут по идее должно быть advsearch.
После сохранения, мы по идее идём к списку... Соответственно, после записи должно идти на view=advsearchs

Щас уже обдумываю переписать список под - advsearches, т.к. нигде не могу встретить ошибку.
Всё что не анархия, то фашизм...
*

b2z

  • Глобальный модератор
  • 7101
  • 769 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #21 : 10.01.2011, 11:41:59 »
После сохранения, мы по идее идём к списку... Соответственно, после записи должно идти на view=advsearchs

Щас уже обдумываю переписать список под - advsearches, т.к. нигде не могу встретить ошибку.
А, ну да. Здесь верно.
В коде я вроде тоже не заметил ошибок. Но возможно, у Вас где-то ошибка в названиях классов или ещё какая-то мелочь. Я на выходных админку своего компонента начал переделывать, у меня все ок было.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Re: Написание компонента для Joomla 1.6
« Ответ #22 : 11.01.2011, 12:14:05 »
После сохранения, мы по идее идём к списку... Соответственно, после записи должно идти на view=advsearchs
Во первых какой родительский контроллер используется то ли JControllerForm или JControllerAdmin не понятно.
Если JControllerForm тут написано
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #23 : 11.01.2011, 12:17:32 »
Да я уже переписал под "advsearches".

Вообще очень странная ошибка... Ещё более сложно её отловить.

Во первых какой родительский контроллер используется то ли JControllerForm или JControllerAdmin не понятно.
Если JControllerForm тут написано

Я делал строго по мануалу.
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #24 : 11.01.2011, 12:25:24 »
Админка по сути готова... Осталось повозиться с языком, но это мелочи.

Как бонус, нужно сделать импорт записей из com_content. Т.е. импортировать(title, articleid и если возможно itemid). Возможно ещё попробовать импортировать ключевики с метатэгов.

По моему в мануале этот урок не представлен. Либо, можно выполнять импорт при установке компонента. Что, не совсем то.
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #25 : 11.01.2011, 18:43:02 »
Народ, кто поможет... Как будет написать
INSERT запрос новым методом.

Есть таблица:
id session_id this_query life_time

Как составить запрос?

С селектом как то проще всё:

  
Код
$this->query->select($this->db->nameQuote('itemid'));
  $this->query->select($this->db->nameQuote('articleid'));
  $this->query->select($this->db->nameQuote('title'));
  $this->query->select($this->db->nameQuote('yearwrite'));
  $this->query->select($this->db->nameQuote('number'));
  $this->query->select($this->db->nameQuote('author'));
  $this->query->select($this->db->nameQuote('keywords'));
  $this->query->from($this->db->nameQuote('#__advsearch'));

Тут они у меня загнаны в св-ва класса(БД и Объект), а в остальном то-же самое.

То ли устал, то ли что... Но не могу сам въехать.
« Последнее редактирование: 11.01.2011, 18:48:15 от dremora »
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #26 : 11.01.2011, 19:12:27 »
Скорее всего будет так начинаться:

Код
$query->insert($db->nameQuote('#__advsearch_c'));

А дальше как писать? Список параметров и значение?

UPD

вопрос снят:

Код
$query        = $db->getQuery(true);
$query->insert('#__tableName');
 
$query->set('id=4');
 
$db->setQuery( $query );
$result        = $db->loadResult();
« Последнее редактирование: 11.01.2011, 19:38:17 от dremora »
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #27 : 12.01.2011, 03:41:35 »
потёрто
« Последнее редактирование: 12.01.2011, 03:55:53 от dremora »
Всё что не анархия, то фашизм...
*

dremora

  • Захожу иногда
  • 462
  • 48 / 12
Re: Написание компонента для Joomla 1.6
« Ответ #28 : 12.01.2011, 16:27:23 »
В финале... У меня два-три вопроса...

а) Почему в режиме SEF теряется itemid? (Если его отключить, то всё работает как нужно)
Как проверить?
Забиваем в поиск год - 1999, кликаем искать.
Переходим на вторую страницу. Нормально всё... Переходим снова на первую страницу - пропадает Itemid. Соответственно левыи модуль отсутствует и выглядит всё - страшно.
б) Как сделать, что-бы при клике по Искать, сразу была ссылка, в стиле ЧПУ?
в) Как добавить заголовок для компонента - своё содержимое тэга "<title></title>" В 1.0xx я помню как это делается... Но тут...
Всё что не анархия, то фашизм...
*

b2z

  • Глобальный модератор
  • 7101
  • 769 / 0
  • Разраблю понемногу
Re: Написание компонента для Joomla 1.6
« Ответ #29 : 12.01.2011, 17:11:01 »
в) Как добавить заголовок для компонента - своё содержимое тэга "<title></title>" В 1.0xx я помню как это делается... Но тут...
$title = 'Моя страница';
$document = JFactory::getDocument();
$document->setTitle($title);
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Документация по созданию модуля для Joomla 2.5 и Joomla 3.x

Автор b2z

Ответов: 1
Просмотров: 1548
Последний ответ 29.07.2015, 09:40:30
от b2z
Создание компонента MVC

Автор borodatych

Ответов: 36
Просмотров: 2422
Последний ответ 13.04.2015, 08:17:30
от flyingspook
Подскажите как сделать русификацию компонента)

Автор stardel

Ответов: 4
Просмотров: 5956
Последний ответ 08.04.2015, 09:08:00
от oxotnikkz
JPluginHelper::importPlugin('content') в Joomla 1.7

Автор Dutch

Ответов: 2
Просмотров: 3963
Последний ответ 30.03.2015, 14:22:51
от twins717
Документация по созданию компонента для Joomla 2.5

Автор Sulpher

Ответов: 74
Просмотров: 51928
Последний ответ 17.11.2014, 13:43:07
от limon142