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

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Написание Компонента
« : 31.08.2016, 10: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

  • Захожу иногда
  • 118
  • 1 / 0
Re: Написание Компонента
« Ответ #1 : 31.08.2016, 11:18:28 »
1.Написал компонент.

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

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

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #2 : 31.08.2016, 11:52:19 »
Так написали или программой создали))) Если бы написали то такое не спрашивали

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

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

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Re: Написание Компонента
« Ответ #3 : 31.08.2016, 12: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()
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #4 : 31.08.2016, 12: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

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #5 : 31.08.2016, 12: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

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Написание Компонента
« Ответ #6 : 31.08.2016, 14:54:25 »
Покажите файл точки входа компонента componame.php и controller.php
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #7 : 31.08.2016, 15: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

  • Гуру
  • 6915
  • 415 / 4
Re: Написание Компонента
« Ответ #8 : 31.08.2016, 15: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

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #9 : 31.08.2016, 15: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

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

zheev

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

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

AlekVolsk

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

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #13 : 31.08.2016, 15:52:37 »
в папке с компонентом папку view переименуйте в views
в виде в view.html.php строку parent::display($tpl); допишите так: return parent::display($tpl);
что получится?

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

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Написание Компонента
« Ответ #14 : 31.08.2016, 15:53:25 »
нзч. будьте внимательнее, у меня у самого, несмотря на опыт, те же ошибки достаточно часто ))
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #15 : 31.08.2016, 15: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

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

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Написание Компонента
« Ответ #17 : 31.08.2016, 16: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

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

zheev

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

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

*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

zheev

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

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #22 : 01.09.2016, 09: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>

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

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #24 : 01.09.2016, 09:42:30 »
Спойлер
[свернуть]
]
Спасибо, Дмитрий
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Написание Компонента
« Ответ #25 : 01.09.2016, 09:56:01 »
А теперь покажите модель )
p.s. это кстати не Laravel
public function teacher($name){
так работать не будет!
надо
public function teacher(){
$name =$this->input->getString('name', '');
*

zheev

  • Захожу иногда
  • 98
  • 0 / 0
Re: Написание Компонента
« Ответ #26 : 01.09.2016, 09:57:31 »
А теперь покажите модель )

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

zheev

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

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

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Написание Компонента
« Ответ #28 : 01.09.2016, 10: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();
}
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Написание Компонента
« Ответ #29 : 01.09.2016, 10:08:33 »
P.S. если у вас Joomla 3+ то вот это jimport('joomla.application.component.modelitem'); в модели не нужно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться