Основной курс по Joomla
0 Пользователей и 1 Гость просматривают эту тему.
  • 205 Ответов
  • 2342 Просмотров
*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Написание Компонента
« : 31.08.2016, 12:58:47 »
Ребят, всем привет. Подскажите пожалуйста.
  • 1.Написал компонент.  В Админке всё ок выводится, а в пользовательской части ошибка 404. по адресу index.php?option=com_componame Представление не найдено [name, type, prefix]:componame, HTML, componameView. Хотя в папке componame в файле view.html.php всё прописано.
    2.И ещё хочу написать поиск, и хочу чтобы выводился список найденных слов выводился через AJAX. Какой URL прописывать к обработчику? url:index.php?option=com_compname/file/class/method   ?


Заранее спасибо.

*

jservice

  • Осваиваюсь на форуме
  • ***
  • 124
  • 1
Re: Написание Компонента
« Ответ #1 : 31.08.2016, 13:18:28 »
1.Написал компонент.

Так написали или программой создали))) Если бы написали то такое не спрашивали

Классы перепишите с заглавных букв class СompoСameView  extends JViewLegacy

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #2 : 31.08.2016, 13:52:19 »
Так написали или программой создали))) Если бы написали то такое не спрашивали

Классы перепишите с заглавных букв class СompoСameView  extends JViewLegacy

Сам, но по инструкции так скажем. Спасибо, но не помогло

*

Septdir

  • Практически профи
  • *******
  • 2165
  • 109
  • JoomlaZen
Re: Написание Компонента
« Ответ #3 : 31.08.2016, 14:12:14 »
1.Написал компонент.  В Админке всё ок выводится, а в пользовательской части ошибка 404. по адресу index.php?option=com_componame Представление не найдено [name, type, prefix]:componame, HTML, componameView. Хотя в папке componame в файле view.html.php всё прописано.
Скорее всего ошибка в в componame.php ибо же в url не указываете какая вьюшка. А дефолтную не прописали.
2.И ещё хочу написать поиск, и хочу чтобы выводился список найденных слов выводился через AJAX. Какой URL прописывать к обработчику? url:index.php?option=com_compname/file/class/method   ?[/li][/list]
AJAX делается через контролер. В него предаем через юрл index.php?option=com_compname&task=name.fuction&format=json(как вариант). из него в модель а возвращаем вьюшку в формате json. через  new JResponseJson()
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #4 : 31.08.2016, 14:17:36 »
Скорее всего ошибка в в componame.php ибо же в url не указываете какая вьюшка. А дефолтную не прописали.AJAX делается через контролер. В него предаем через юрл index.php?option=com_compname&task=name.fuction&format=json(как вариант). из него в модель а возвращаем вьюшку в формате json. через  new JResponseJson()

Спасибо за такой ответ)) URL пишу так index.php?option=com_componame и так же пробовал index.php?option=com_componame&view=ivgpu всё равно

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #5 : 31.08.2016, 14:27:42 »
Скорее надо было сразу код выложить view.html.php

<?php

defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.view');

class IvgpuViewIvgpu extends JViewLegacy
{

    protected $item;

    public function display($tpl = null)
    {
      $this->item = 'Hello World';


        parent::display($tpl);

        $this->setDocument();
    }
}

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #7 : 31.08.2016, 17:12:34 »
Покажите файл точки входа компонента componame.php и controller.php

Спасибо, Дмитрий, что ответили)) Писал этот компонент по вашим блогам)

<?php

defined('_JEXEC') or die;

JError::$legacy = false;

jimport('joomla.application.component.controller');

$controller = JControllerLegacy::getInstance('Ivgpu');

$input = JFactory::getApplication()->input;

$controller->execute($input->getCmd('task', 'display'));

$controller->redirect();


controller.php

<?php

defined('_JEXEC') or die;

jimport('joomla.application.component.controller');

class IvgpuController extends JControllerLegacy
{
}

*

AlekVolsk

  • Профи
  • ********
  • 6301
  • 336
Re: Написание Компонента
« Ответ #8 : 31.08.2016, 17:21:50 »
У вас получается, что вы вызываете метод в контроллере, которого не существует

ваш ivgpu.php:
Код: php
<?php defined( '_JEXEC' ) or die;
$controller = JControllerLegacy::getInstance( 'ivgpu' );
$controller->execute( JFactory::getApplication()->input->get( 'task' ) );
$controller->redirect();

ваш controller.php:
Код: php
<?php defined( '_JEXEC' ) or die;
class IvgpuController extends JControllerLegacy
{

function display( $cachable = false, $urlparams = array() )
{
$this->default_view = 'myview'; // сюда вписать имя вида по умолчанию, обязательно!
parent::display( $cachable, $urlparams );
return $this;
}

}

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #9 : 31.08.2016, 17:26:48 »
У вас получается, что вы вызываете метод в контроллере, которого не существует

ваш ivgpu.php:
Код: php
<?php defined( '_JEXEC' ) or die;
$controller = JControllerLegacy::getInstance( 'ivgpu' );
$controller->execute( JFactory::getApplication()->input->get( 'task' ) );
$controller->redirect();

ваш controller.php:
Код: php
<?php defined( '_JEXEC' ) or die;
class IvgpuController extends JControllerLegacy
{

function display( $cachable = false, $urlparams = array() )
{
$this->default_view = 'myview'; // сюда вписать имя вида по умолчанию, обязательно!
parent::display( $cachable, $urlparams );
return $this;
}

}

Спасибо но тоже не помогло(((

*

AlekVolsk

  • Профи
  • ********
  • 6301
  • 336
Re: Написание Компонента
« Ответ #10 : 31.08.2016, 17:29:49 »
тогда запакуйте папку компонента и прикрепите архив к следующему своему посту
хотя вложения могут быть вам недоступны, т.к. нет 10 постов на форуме. тогда кидайте архив на файлобменник

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #11 : 31.08.2016, 17:36:53 »
тогда запакуйте папку компонента и прикрепите архив к следующему своему посту
хотя вложения могут быть вам недоступны, т.к. нет 10 постов на форуме. тогда кидайте архив на файлобменник

https://yadi.sk/d/LB7RDLQIudYHT Спасибо большое вам))

*

AlekVolsk

  • Профи
  • ********
  • 6301
  • 336
Re: Написание Компонента
« Ответ #12 : 31.08.2016, 17:49:18 »
в папке с компонентом папку view переименуйте в views
в виде в view.html.php строку parent::display($tpl); допишите так: return parent::display($tpl);
что получится?

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #13 : 31.08.2016, 17:52:37 »
в папке с компонентом папку view переименуйте в views
в виде в view.html.php строку parent::display($tpl); допишите так: return parent::display($tpl);
что получится?

Работает!Спасибо вам большое)))

*

AlekVolsk

  • Профи
  • ********
  • 6301
  • 336
Re: Написание Компонента
« Ответ #14 : 31.08.2016, 17:53:25 »
нзч. будьте внимательнее, у меня у самого, несмотря на опыт, те же ошибки достаточно часто ))

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #15 : 31.08.2016, 17:56:18 »
нзч. будьте внимательнее, у меня у самого, несмотря на опыт, те же ошибки достаточно часто ))

А вы случайно по AJAX ещё не могли проконсультировать? jQuery.ajax(
            type: "POST",
            url:'index.php?option=com_ivgpu&task=teacher',
            data:'teacher='.jQuery(this).val();
        success:function(e){
            $('div.block').html(e);
        }

Вот так я правильно обращаюсь к классу teacher? Заранее спасибо

*

AlekVolsk

  • Профи
  • ********
  • 6301
  • 336
Re: Написание Компонента
« Ответ #16 : 31.08.2016, 18:01:08 »
вы вызываете контроллер IvgpuControllerAjax, а в нем метод teacher, который ессно должен быть реализован и выдать определенный результат, в конце метода обязательно exit вызывать, иначе на выходе получите не результат функции, а всю главную страницу сайта

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
Re: Написание Компонента
« Ответ #17 : 31.08.2016, 18:06:02 »
вы вызываете контроллер IvgpuControllerAjax, а в нем метод teacher, который ессно должен быть реализован и выдать определенный результат, в конце метода обязательно exit вызывать, иначе на выходе получите не результат функции, а всю главную страницу сайта
С чего вдруг IvgpuControllerAjax?

Для AJAX лучше вызывать format=raw
Код: php-brief
index.php?option=com_ivgpu&task=teacher&format=raw

Метод teacher должен быть тогда в главном контроллере controller.raw.php (IvgpuController), а если нужно использовать конкретный контроллер, то:
Код: php-brief
index.php?option=com_ivgpu&task=ivgpu.teacher&format=raw

Тогда будет controllers/ivgpu.raw.php (IvgpuControllerIvgpu) и в нём метод teacher.

*

AlekVolsk

  • Профи
  • ********
  • 6301
  • 336
Re: Написание Компонента
« Ответ #18 : 31.08.2016, 18:10:06 »
мне кажется, ТС, вам прежде чем за AJAX братся, надо стандартную логику поднять и понять, а уж потом совершенствоваться вглубь дальше, не все так тривиально может быть, как то может изначально показаться

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #19 : 31.08.2016, 18:27:59 »
мне кажется, ТС, вам прежде чем за AJAX братся, надо стандартную логику поднять и понять, а уж потом совершенствоваться вглубь дальше, не все так тривиально может быть, как то может изначально показаться

мне через AJAX нужно обратиться к методу teacher в классе IvgpuControllerSearch. значит будет так? index.php?option=com_ivgpu&task=search.teacher&format=search



*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #21 : 31.08.2016, 19:10:07 »
Код: php-brief
index.php?option=com_ivgpu&task=search.teacher
Спасибо вам, Дмитрий и спасибо, AlekVolsk))))

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #22 : 01.09.2016, 11:12:51 »
А не могли бы ещё помочь?(

jQuery(document).ready(function(){
    jQuery('.search_teacher').keydown(function(){
        jQuery.ajax({
            type: "POST",
            url:'index.php?option=com_ivgpu&task=search.teacher',
            data:'name='+jQuery(this).val(),
        success:function(e){
            jQuery('div.block').html(e);
        }
    }
        )
    });
});

Этой функцией отрпаляю запрос к методу teacher класса IvgpuControllerSearch но мне выдаёт ошибку

<div class="block"><br>
<b>Warning</b>:  Missing argument 1 for IvgpuControllerSearch::teacher(), called in /home/u177306/iv-politehru/www/libraries/legacy/controller/legacy.php on line 702 and defined in <b>/home/u177306/iv-politehru/www/components/com_ivgpu/controllers/search.php</b> on line <b>11</b><br>
<br>
<b>Fatal error</b>:  Call to a member function searchTeacher() on a non-object in <b>/home/u177306/iv-politehru/www/components/com_ivgpu/controllers/search.php</b> on line <b>13</b><br>
</div>

Как понимаю данные не получает. Как правильно передавать данные? Заранее благодарю


*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #24 : 01.09.2016, 11:42:30 »
Спойлер
[свернуть]
]
Спасибо, Дмитрий

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2787
  • 376
Re: Написание Компонента
« Ответ #25 : 01.09.2016, 11:56:01 »
А теперь покажите модель )
p.s. это кстати не Laravel
public function teacher($name){
так работать не будет!
надо
public function teacher(){
$name =$this->input->getString('name', '');
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #26 : 01.09.2016, 11:57:31 »
А теперь покажите модель )

Спойлер
[свернуть]

*

zheev

  • Осваиваюсь на форуме
  • ***
  • 99
  • 0
Re: Написание Компонента
« Ответ #27 : 01.09.2016, 12:03:58 »
А теперь покажите модель )
p.s. это кстати не Laravel
public function teacher($name){
так работать не будет!
надо
public function teacher(){
$name =$this->input->getString('name', '');

Спасибо Сейчас попробую))

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2787
  • 376
Re: Написание Компонента
« Ответ #28 : 01.09.2016, 12:07:17 »
и так, в модели, тоже не будет работать:  select('fname','id')
Код: php
public function searchTeacher( $name )	{
$query = $this->getDbo()->getQuery( true )
->select( 'fname, id' )
->from( '#__teacher' )
->where( 'fname LIKE ' . $this->getDbo()->q( '%' . $name . '%' ) );
return $this->getDbo()->setQuery( $query )->loadObjectList();
}
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2787
  • 376
Re: Написание Компонента
« Ответ #29 : 01.09.2016, 12:08:33 »
P.S. если у вас Joomla 3+ то вот это jimport('joomla.application.component.modelitem'); в модели не нужно!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016