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

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Информация по написанию компонента
« Ответ #330 : 02.12.2010, 10:01:32 »
Правильно было бы сделать так выложить архив, в конце урока с полностью рабочим компонентом, а к каждой статье исходник файлов который пишется в уроке, скажем я пишу компонент, и у меня ошибка читаю всё правильно, но не пашет, тут же скачиваю файл к этому уроку и сравниваю, ага вот тут ошибка моя! И тогда bzzik Вашей статья стала бы бесценной и лучшей из всех тех что есть их там всего пару сайтов сайтов 6! Что не говори, а за статью Вам признателен!  :D *DRINK*
Я учту этот момент. Поправлю все статьи, тогда все встанет на свои места.
*

Kovryga

  • Захожу иногда
  • 99
  • 1 / 0
Re: Информация по написанию компонента
« Ответ #331 : 16.02.2011, 08:40:30 »
ребят, подскажите кто как решает следующую задачу при создании компонента:

есть функция в modules на стороне фронта, которая обрабатывает данные формы с шаблона.
надо чтобы при такой проверке:

   if(empty($date_info)) return $error= 'Ошибка! Данные не были отправлены';

обработать потом вывод ошибки и вывести значение переменной $error в шаблон?
я понимаю, что конечно можно вывести это как JError::raiseWarning( 100, 'Ошибка!' ), но хотелось как описал выше.




*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Re: Информация по написанию компонента
« Ответ #332 : 16.02.2011, 08:59:52 »
обработать потом вывод ошибки и вывести значение переменной $error в шаблон?
а чем это отличается от JError?
Делается проверка в контроллере или еще где и так же выводиться с помощью редиректа или просто echo.
*

Kovryga

  • Захожу иногда
  • 99
  • 1 / 0
Re: Информация по написанию компонента
« Ответ #333 : 16.02.2011, 10:01:48 »
может я конечно, что-то неправильно понимаю, но сообщения от JError кажется выводятся только в области <jdoc:include type="message" /> ?

а мне бы хотелось выводить сообщение от контролера переданное из шаблона в этот же шаблон, но в произвольном месте.   
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Информация по написанию компонента
« Ответ #334 : 16.02.2011, 10:07:22 »
Откуда редирект идет после ошибки?
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

Kovryga

  • Захожу иногда
  • 99
  • 1 / 0
Re: Информация по написанию компонента
« Ответ #335 : 16.02.2011, 10:24:11 »
блин...прошу прощение... не из контролера, а из модели идет редирект... на вьюшку, ну а там на шаблон.

т.е. я в шаблоне заполнил форму... её значения передал во вьюшку...там смотрю, что от формы пришли значения и вызываю функции модели...
вот в одной из этих функций делаю проверку и хочу при ошибке передать переменную и её значение в шаблон.
*

Kovryga

  • Захожу иногда
  • 99
  • 1 / 0
Re: Информация по написанию компонента
« Ответ #336 : 16.02.2011, 10:47:24 »
и еще... может кто подскажит, где наступил на грабли:

подключаю jquery и плагины со стилями в шаблоне компонента на фронте:

Код
		$document->addScript("/components/com_contest/accordion/jquery-1.4.4.min.js");
$document->addScript("/components/com_contest/accordion/jquery-ui-1.8.9.custom.min.js");
$document->addStyleSheet("/components/com_contest/accordion/jquery-ui-1.8.9.custom.css");

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

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Информация по написанию компонента
« Ответ #337 : 16.02.2011, 10:53:01 »
Ну если функцию проверки вызываешь из модели в виде то так.
Код: php
$error = $model->есть функция в modules на стороне фронта, которая обрабатывает данные формы с шаблона();
$this->assignRef('error',$error);
//в шаблоне
echo $this->error;
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Re: Информация по написанию компонента
« Ответ #338 : 16.02.2011, 11:20:48 »
может я конечно, что-то неправильно понимаю, но сообщения от JError кажется выводятся только в области <jdoc:include type="message" /> ?
неправильно понимаете.
Ошибки выводятся отдельным файлом templates/system/error.php
*

Kovryga

  • Захожу иногда
  • 99
  • 1 / 0
Re: Информация по написанию компонента
« Ответ #339 : 16.02.2011, 11:59:11 »
Ну если функцию проверки вызываешь из модели в виде то так.
Код: php
$error = $model->есть функция в modules на стороне фронта, которая обрабатывает данные формы с шаблона();
$this->assignRef('error',$error);
//в шаблоне
echo $this->error;


Блин, ларчик просто открывался! 
Спасибки :)

А по-поводу скриптов подключаемых, что нибудь можете посоветовать?
*

Kovryga

  • Захожу иногда
  • 99
  • 1 / 0
Re: Информация по написанию компонента
« Ответ #340 : 16.02.2011, 19:45:00 »
у всех срабатывает подключение скриптов JS?
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Информация по написанию компонента
« Ответ #341 : 16.02.2011, 19:47:34 »
Поставь FireBug, включи консоль и посмотри, что там со скриптами творится.
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

Kovryga

  • Захожу иногда
  • 99
  • 1 / 0
Re: Информация по написанию компонента
« Ответ #342 : 17.02.2011, 00:31:11 »
так, ну нашел в чем проблема
в шаблоне сайта прописано:

Код
	<jdoc:include type="head" />

и соответственно при такой записи

Код
$document->addScript("/components/com_contest/accordion/jquery-ui-1.8.9.custom.min.js");

вызов JS происходит в той области шаблона. но при этом нужная функция в шаблоне компонента не срабатывает. пишет

Код
 jq("#accordion").accordion is not a function 

а когда в шаблоне прописываю ручками вызов:
Код
<script type="text/javascript" src="/components/com_contest/accordion/jquery-ui-1.8.9.custom.min.js"></script>

после этой области
Код
	<jdoc:include type="head" />


то функция срабатывает в шаблоне и все работает.

Получается, что где-то наверное идет перекрытие. А вот как это решить и исправить, и чтобы все плагины устанавливались вместе с компонентой и не было необходимости лезть в шаблона, пока не могу сообразить
*

Kovryga

  • Захожу иногда
  • 99
  • 1 / 0
Re: Информация по написанию компонента
« Ответ #343 : 17.02.2011, 00:49:00 »
пока в самом шаблоне компонента написал напрямую:

Код
<script type="text/javascript" src="/components/com_contest/accordion/jquery-ui-1.8.9.custom.min.js"></script>

без   
Код
 $document->addScript

так хоть пока работает

Re: Информация по написанию компонента
« Ответ #344 : 20.02.2011, 23:12:18 »
Господа, может не в тему ну да ладно. Все что сказано выше это хорошо, но готовых компонентов великое множество и все они на инглиш. Дак может переводом займетесь и доводкой до ума, как раз и руку набьете ведь компоненты потрошить нужно. Я любитель, делаю сайт о путешествиях и чтобы перевести комп  hotelguide на рус потратил неделю. Думаю таким парням как вы это было бы раз плюнуть. Ну удачи !
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Информация по написанию компонента
« Ответ #345 : 21.02.2011, 10:31:19 »
Kovryga попробуйте добавить $document->addScript("/components/com_contest/accordion/jquery-ui-1.8.9.custom.min.js"); в точке входа Вашего компонента.
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Информация по написанию компонента
« Ответ #346 : 21.02.2011, 10:41:56 »
Чек боксы разобрал, публикацию, за день методом тыка тоже! а вот постраничную навигацию хоть убей не могу. Пересмотрел кучу разной информации и всё там просто как раз два. Но нет не могу
Вот сайт на котором описывается что да как сделать для постраничной навигации. Я заношу данные в модель. потом в вид потом в шаблон, сохраняю захожу он выдаёт мне ошибку и выводит часть страницы.
Цитировать
http://joomlapedia.ru/index.php/Использование_JPagination_в_компоненте
В чём может быть причина? в том что он не может этот класс подключить!? или что то недописано! может в контроллер тоже нужно что то занести?
подскажите кто знает!
Сама ошибка
Цитировать
Fatal error: Call to a member function getListFooter() on a non-object
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Информация по написанию компонента
« Ответ #347 : 22.02.2011, 11:45:32 »
Причину разобрал это неверная запись в модели у меня была. теперь пагинация работает. Сделал сортировку полей опубликовано или нет, впринципе там просто. А как вот сделать сортировку полей, незнаю как правильно называется может поправите. Это когда можно сохранять порядок данных в таблице,
скажем 1. Крыло 2. дверь 3. капот.
вот крыло и капот поменять местами и сохранить. и в итоге должно быть
1. капот 2.дверь 3.крыло как это можно реализовать можете подсказать!?
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Информация по написанию компонента
« Ответ #348 : 24.02.2011, 09:08:31 »
Сделал я параметр ordering (Порядок, упорядоченность). В интернете я нашёл лишь только 1 статью по этому поводу и то немец какойто описывал я честно не очень разобрался, и неочень у меня получилось. Работал только вывод а запись нет. В итоге копания в стандартных компонентах дали результат теперь я могу спокойно записывать данные. Щас буду в самой части сайта делать сортировку что бы он выводил записи согласно ordering. А делается всё это довольно просто достаточно сделать шаблон вид контроллер и в модели прописать действия. Один минус всего этого я это сделал, но не всё понял как работает.
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

Kovryga

  • Захожу иногда
  • 99
  • 1 / 0
Re: Информация по написанию компонента
« Ответ #349 : 26.02.2011, 11:26:27 »
Kovryga попробуйте добавить $document->addScript("/components/com_contest/accordion/jquery-ui-1.8.9.custom.min.js"); в точке входа Вашего компонента.
А как понимать в  "точке входа Вашего компонента"?
ведь и так в компоненте пишу... и сам интересное локально, на чистой СМС все работает.

Цитировать
Сделал я параметр ordering (Порядок, упорядоченность). В интернете я нашёл лишь только 1 статью по этому поводу и то немец какойто описывал я честно не очень разобрался, и неочень у меня получилось. Работал только вывод а запись нет. В итоге копания в стандартных компонентах дали результат теперь я могу спокойно записывать данные. Щас буду в самой части сайта делать сортировку что бы он выводил записи согласно ordering. А делается всё это довольно просто достаточно сделать шаблон вид контроллер и в модели прописать действия. Один минус всего этого я это сделал, но не всё понял как работает.

Тоже надо сортировку (порядок) ручную сделать.
поделитесь опытом что да как?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Информация по написанию компонента
« Ответ #350 : 26.02.2011, 12:41:21 »
А как понимать в  "точке входа Вашего компонента"?
ведь и так в компоненте пишу... и сам интересное локально, на чистой СМС все работает.
Ну в самом главном файле, у Вас он contest.php, а ещё можно попробовать добавить JURI::root():

Цитировать
$document = JFactory::getDocument();
$document->addScript(JURI::root(). 'components/com_contest/accordion/jquery-ui-1.8.9.custom.min.js');
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Re: Информация по написанию компонента
« Ответ #351 : 26.02.2011, 23:20:28 »
Конечно, но оговорюсь что у каждого структура своя.

1. создаём в таблице поле ordering параметр integer (int)

2. Открываем шаблон, default.php и туда пишем строчки. заголовки
Цитировать
</th>
<th width="8%" nowrap="nowrap">
<?php echo JHTML::_('grid.sort',  'Order', 'a.ordering', $this->lists['order_Dir'], $this->lists['order'] ); ?>
<?php if ($ordering) echo JHTML::_('grid.order',  $this->items ); ?>
</th>
Первое это сортировка а второе это кнопка сохранить. Дальше в шаблоне пишем
Цитировать
<td class="order">
<?php $disabled = $ordering ?  '' : 'disabled="disabled"'; ?>
<input type="text" name="order[]" size="5" value="<?php echo $row->ordering;?>" <?php echo $disabled ?> class="text_area" style="text-align: center" />
</td>
disabled когда вы войдёте в компонент кнопки не будет и поля будут неактивны. но данные будут выводиться.
Следующие тоже пишем в шаблоне! Признаюсь честно незнаю почему в шаблоне я пытался в вид затолкать но не получилось. вообщем это и есть сама кнопка сохранить её ставим в самом начале формы
Цитировать
<?php
//Этот параметр для отображения позиции.
$ordering = ($this->lists['order'] == 'a.ordering');
?>

3. Открываем view.html.php и в нём пишем перед parent::display($tpl);
Код
		$lists['order_Dir'] = $filter_order_Dir;
$lists['order'] = $filter_order;
$this->assignRef('lists', $lists);

Это мы передаём данные в вид из модели.

4. Открываем контроллер у меня он называется priceleaf.php это не тот контроллер который лежит в корне компонента. у меня он лежит в папке controllers. в нём у меня описываются действия для кнопок сохранить удалить применить и так далее. И в нём пишем функцию для сохранения. незабудьте в ней поменять название своей модели $model = $this->getModel('priceleaf');.
Цитировать
function saveorder()
   {
      // Check for request forgeries
      JRequest::checkToken() or jexit( 'Invalid Token' );

      $cid    = JRequest::getVar( 'cid', array(), 'post', 'array' );
      $order    = JRequest::getVar( 'order', array(), 'post', 'array' );
      JArrayHelper::toInteger($cid);
      JArrayHelper::toInteger($order);

      $model = $this->getModel('priceleaf');
      $model->saveorder($cid, $order);

      $msg = JText::_( 'NEW ORDERING SAVED' );
      $this->setRedirect( 'index.php?option=com_priceleaf', $msg );
   }

5. Теперь модель через неё нужно записать наши данные. у меня файл priceleaf.php В ней пишем функцию
Цитировать
function saveorder($cid = array(), $order)
   {
      $row =& $this->getTable();
      $groupings = array();

      // update ordering values
      for( $i=0; $i < count($cid); $i++ )
      {
         $row->load( (int) $cid[$i] );
         // track categories
         $groupings[] = $row->catid;

         if ($row->ordering != $order[$i])
         {
            $row->ordering = $order[$i];
            if (!$row->store()) {
               $this->setError($this->_db->getErrorMsg());
               return false;
            }
         }
      }

      // execute updateOrder for each parent group
      $groupings = array_unique( $groupings );
      foreach ($groupings as $group){
         $row->reorder('catid = '.(int) $group);
      }

      return true;
   }

6. Финишная в папке tables у меня лежит файл priceleaf.php в нём пишем следующее
Цитировать
   var $ordering = null;
В этом файле мы определяем с какими данными мы будем работать. Приведу пример всего файла.

Цитировать
<?php
//Защита от прямого обращения к скрипту
//Определяем с какими переменными из базы будем работать.
class TablePriceleaf extends JTable
{

   var $id = null;

   var $name = null;
   
    var $published = null;
   
    var $ordering = null;

   function TablePriceleaf(& $db) {
      parent::__construct('#__priceleaf_razdel', 'id', $db);
   }
}

Вот и всё! после этого должно всё работать. Но я уверен что не у всех заработает, так как тут может быть несколько причин у вас другая структура, у вас не написан _buildQuery вы не поставили свою модель как я писал. Но заметьте что у вас не будет стрелочек которые будут смещать порядок сортировки. Я их убрал от туда. Так как не смог доконца понять как с ними работать, я нашёл функции и всё остальное но они не работали бился бился но не получилось увы. Но я был рад и тому что в этом смог сам разобраться. Как я понял что бы эти кнопки работали (вывод из компоненты ссылки родной джумловский) Они должны быть привязаны к какойто категории или что то в этом роде, так как в базе записи местами не поменяешь. Ну и что бы это работало на сайте впрочем если вы разберётесь то я вам скажу как сделать сортировку на сайте что бы ваш параметр ордеринг работал (там есть подвох который я случайно узнал, если бы не один момент я бы долго пытался понять в чём проблема). Надеюсь Вам поможет удачи. *DRINK*
P.S Всё сделано из ручного просмотра сторонних компонентов и метода тыка.
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

помощник

  • Новичок
  • 2
  • 0 / 0
Re: Информация по написанию компонента
« Ответ #352 : 02.03.2011, 12:38:33 »
Народ где найти действително полезную информацию о написании компонента на Joomla 1.5 ?
Всё что находил написанно ужасно.
Спас[
Народ где найти действително полезную информацию о написании компонента на Joomla 1.5 ?
Всё что находил написанно ужасно.
Спасибо.
Найти хорошие модули  для Joomla не так просто но я помогу тебе, точнее постараюсь . у меня тоже раньше была проблема с этим пока мои друзья не предложили мне этот тег <a href=”http://ldi.ru/razrabotka-i-sozdanie-saita.html”>ldi.ru</a>  попробуйте очень хорошая тег.Если этот не подойдет  обращайся на мой э/п еще есть варианты хотя и этот тега должно подходить!Рад был вам помочь!   

/quote]
*

помощник

  • Новичок
  • 2
  • 0 / 0
Re: Информация по написанию компонента
« Ответ #353 : 02.03.2011, 12:45:16 »
Народ где найти действително полезную информацию о написании компонента на Joomla 1.5 ?
Всё что находил написанно ужасно.
Спасибо.
Найти хорошие теги для модулей не так уж и просто но если хорошо постараться найти можно все, а вам  и не придется потрудится как мне в поисках модулей для Joomla  потому что я те помогу точнее постараюсь вот например <a href=”http://ldi.ru/razrabotka-i-sozdanie-saita.html”>ldi.ru</a> очень хорошая есть еще и по проще <a href=”http://ldi.ru”>ldi.ru</a> попробуйте.Рад был вам помочь!   

*

ANRY_777

  • Осваиваюсь на форуме
  • 25
  • 2 / 0
Re: Информация по написанию компонента
« Ответ #354 : 18.04.2011, 17:57:52 »
Добрый день! При разработке компонента столкнулся с такой проблемой!
Подскажите пожалуйста как удалить повторяющиеся элементы многомерно массива
Результат функции print_r ($ myarray);
Код
Array ( [0] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1E200 ) ) 
Array ( [0] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1E200 ) )
Array ( [0] => stdClass Object ( [ARL_DISPLAY_NR] => 5453101G210 ) [1] => stdClass Object ( [ARL_DISPLAY_NR] => 553101E200 ) )
Array ( [0] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1E000 ) [1] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1E200 ) [2] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1E300 ) [3] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1G200 ) [4] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1G400 ) )
Array ( [0] => stdClass Object ( [ARL_DISPLAY_NR] => 54660-1E000 ) [1] => stdClass Object ( [ARL_DISPLAY_NR] => 54660-1E200 ) [2] => stdClass Object ( [ARL_DISPLAY_NR] => 54660-1E300 ) [3] => stdClass Object ( [ARL_DISPLAY_NR] => 54660-1G200 ) [4] => stdClass Object ( [ARL_DISPLAY_NR] => 54660-1G400 ) )
Array ( [0] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1E000 ) [1] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1E200 ) [2] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1E300 ) [3] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1G200 ) [4] => stdClass Object ( [ARL_DISPLAY_NR] => 54650-1G400 ) )

array_unique не работает! Посоветуйте что делать!
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Информация по написанию компонента
« Ответ #355 : 18.04.2011, 18:38:18 »
Погуглить надо было - 6 ссылка дает ответ.
*

ANRY_777

  • Осваиваюсь на форуме
  • 25
  • 2 / 0
Re: Информация по написанию компонента
« Ответ #356 : 19.04.2011, 10:24:20 »
Вы лично использовали решение приведено в 6 ссылке? Потому что или я чего не понимаю но данное решение мне не помогает. Не думайте что я не обращался к Google. Как вы видите в 6 ссылке приведен многомерный массив с элементами которого являются массив из двух элементов как извините я вам привел свой ​​массив состоящий из массива различной размерности от 1 элемента до 4 элементов. ?
Из данного массива мне нужны только значения [ARL_DISPLAY_NR] => 54650-1E200 без клучей возможно есть решение как бы их вытащить.
Спасибо за помощь.
*

ktotut

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Re: Информация по написанию компонента
« Ответ #357 : 02.05.2011, 21:28:12 »
Добрый день!

Прошу подскажите:
Как из представления (файл view.html.php) вызвать функцию модели с передачей ей параметров ?

спасибо!
*

SDKiller

  • Живу я здесь
  • 2706
  • 329 / 5
  • ...ergo sum
Re: Информация по написанию компонента
« Ответ #358 : 02.05.2011, 21:41:19 »
Ну на уровне Hello,world можно например так

В модели

Код
function myFunction($a,$b,$c) {
...
}

Во view

UPD: так не делать ! спал  ;D
Код
$model -> $this->getModel();
$d = $model->myFunction($a,$b,$c);
   

конечно же $model =$this->getModel();
« Последнее редактирование: 03.05.2011, 12:59:06 от SDKiller »
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Информация по написанию компонента
« Ответ #359 : 03.05.2011, 10:14:14 »
Код SDKiller немного некорректен. Вот так правильно во вьюхе:

Код: php
$model = $this->getModel();
$d = $model->myFunction($a, $b, $c);
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

При попытке войти в админку 404 ошибка компонента

Автор omezik

Ответов: 4
Просмотров: 2397
Последний ответ 31.08.2019, 22:41:46
от Taatshi
Вывод компонента в качестве модуля

Автор fMichail

Ответов: 4
Просмотров: 2967
Последний ответ 06.08.2014, 15:16:29
от anar4ik
Переменные, доступные из любого компонента

Автор Serjo_man

Ответов: 3
Просмотров: 1522
Последний ответ 03.02.2014, 05:22:00
от Arkadiy
Работа компонента Ninja RSS 1.1.11 на Joomla 1.5.26

Автор Adam.K

Ответов: 1
Просмотров: 1433
Последний ответ 16.12.2013, 21:26:31
от Adam.K
Доработка компонента - нужна помощь

Автор wfire

Ответов: 5
Просмотров: 1353
Последний ответ 24.09.2013, 13:17:28
от robert