Переменная в ссылках.Не выполняется задаm

  • 25 Ответов
  • 355 Просмотров

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

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
   Всем привет! Требуется ваша помощь в написании компонента для своего сайта. При передачи переменной ($item->id) в ссылке ни как не могу ее отлавить и выполнить функцию в модели.
Поиск перерыл вдоль и поперек, форум последний крик. Вот код:

Ссылка в представлении
Спойлер
[свернуть]

Код контроллера lists.php
Спойлер
[свернуть]

функция в модели lists.php
Спойлер
[свернуть]

Перепробовал уже все варианты. Три дня бьюсь с этой фигней. Ни сообщения ошибки, ни удаления. Как будто кода вообще не существует.
« Последнее редактирование: 05.09.2016, 17:48:55 от ghostcom »

*

NewUsers

  • Завсегдатай
  • *****
  • 578
  • 46
Код
<a class="btn" href="index.php?option=com_ocenka&view=lists&controller=lists&task=delete&cid=<?php echo $item->id;?>" onclick="return confirm('точно?');">Удалить из базы</a>

Это должно быть на странице какого-нибудь списка.
Выведи содержимое переменной которая используется в foreach для формирования списка...
Ну или хотя бы попробуй вывести содержимое переменной $item в пределах ее видимости...

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
Это должно быть на странице какого-нибудь списка.
Выведи содержимое переменной которая используется в foreach для формирования списка...
Ну или хотя бы попробуй вывести содержимое переменной $item в пределах ее видимости...

Не совсем понял вас.

да это список, сылка в каждой записи. ID передается в адресную строку правильно.

*

NewUsers

  • Завсегдатай
  • *****
  • 578
  • 46
да это список, сылка в каждой записи. ID передается в адресную строку правильно.

Мне всегда помогало!
Код: php
<?php $id = JRequest::getVar('id'); ?>

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
Код: php
<?php foreach ( $this->items as $item ): ?>

это?

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
Мне всегда помогало!
Код: php
<?php $id = JRequest::getVar('id'); ?>

Так пробовал вместо jInput не помогло или ч не туда вставляю. В модель или контроллер надо?


*

NewUsers

  • Завсегдатай
  • *****
  • 578
  • 46
Если я добавляю страница я весь код пишу в модели, а контроллер у меня пустой

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
Если я добавляю страница я весь код пишу в модели, а контроллер у меня пустой

Tak!! А как вызвать функцию по ссылке?

index.php?model=lists&task=delete&id=100

так чтоли?

*

NewUsers

  • Завсегдатай
  • *****
  • 578
  • 46
Tak!! А как вызвать функцию по ссылке?

index.php?model=lists&task=delete&id=100

так чтоли?


Покажи как выглядит страница? Что бы удалить запись нажимаешь на ссылку или кнопку?

*

NewUsers

  • Завсегдатай
  • *****
  • 578
  • 46
Лучше всего, сделай по принципу который используется в других компонентах... Там все просто и легко.

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
Это не <form> и не <input submit>, а простая <a></a>.
Я и так делаю по аналогии с 'phoca guestbook' компонента, принцип тот же и стоит на одном сайте, а работать не хочет. Мне кажется дело в route.php. Пока не могу разобраться

*

robert

  • Профи
  • ********
  • 4005
  • 371
ТС, у вас какая-то сборная солянка.
1. Конечно, вы можете делать по-своему в своей точке входа, но в Joomla в $_REQUEST обычно передаются либо task, либо view. В вашем случае - task.
2. controller не передается - он присутствует в task в виде controller.task (точнее, subcontroller.task).
3. зачем вызывать функцию delete, оговаривая при этом, что на самом деле вызывается remove? Не проще ли переименовать remove() в delete()?
4. в модели не нужно указывать аргумент $cid в функции delete(), или хотя бы указать его значение по-умолчанию: у вас он берется из $_REQUEST.
Предполагаю, что вы должны были вызвать
Код: php-brief
index.php?option=com_ocenka&task=lists.delete&cid=<?php echo $item->id;?>
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
при таком
index.php?option=com_ocenka&task=lists.delete&cid=<?php echo $item->id;?>
вызове выдает
The requested URL/lists.remove was not found on this server.

переименовывал remove в delete, delete в remove, какая разница?

*

robert

  • Профи
  • ********
  • 4005
  • 371
переименовывал remove в delete, delete в remove, какая разница?
В __construct() вы писали
Код: php-brief
$this->registerTask('delete', 'remove');
Это вы говорите системе: "Когда я вызываю delete, на самом деле я вызываю remove (ну я такой коварный, у меня не ищи легкой работы)" - теперь видите разницу?
Соответственно, когда вы переименовали remove в delete, но не удалили ту строку, система продолжает искать remove.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
Везде менял на delete, потом везде пробовал remove.

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
Неужели ни кто не может объяснить какие нюансы вызова task ?

*

robert

  • Профи
  • ********
  • 4005
  • 371
Я вам уже объяснил вкратце. Попробую еще раз.
В компоненте есть основной контроллер (в корневой папке модуля) и субконтроллеры (в папке controllers). В отличие от функций (tasks) основного контроллера, которые вызываются таким образом:
/index.php?option=component_name&task=task_name&blahblahblah
, функции субконтроллера вызываются вместе с названием последнего:
/index.php?option=component_name&task=subcontroller_name.task_name&blahblahblah.
Но это еще не все: мы не знаем, что вы поаналогииничали в точке входа, в моделях... Короче, выкладывайте весь код своего компонента.
Черт побери, я уже жалею, что начал здесь писать. Все почему-то сразу за компоненты взялись, не утруждаясь изучать азы. Здесь что, песочница, готовящая Joomla-разработчиков с нуля?
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
вот
Спойлер
[свернуть]

*

robert

  • Профи
  • ********
  • 4005
  • 371
вот
Спойлер
[свернуть]
Так тут уже другой код. Ну и что с ним не так?

P.S. А, вижу, вы хотите удалить запись с фронта? Ну, для начала в модели вместо $this->_db поставьте $db.
Потом, я вроде уже писал, что view и task одновременно не передаются. А у вас все равно стоит index.php?option=com_online_ocenka&view=lists&task=lists.remove&cid='.$item->id
« Последнее редактирование: 06.09.2016, 18:27:21 от robert »
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
Код почти тот же! В виде lists(фронтэнд) есть кнопка "Удалить из базы" при нажатии задача не выполняется ни че не удаляется. Уже по всякому пробовал. По этому и обратился  к форуму. А у вас что работает?

*

robert

  • Профи
  • ********
  • 4005
  • 371
P.S. А, вижу, вы хотите удалить запись с фронта? Ну, для начала в модели вместо $this->_db поставьте $db.
Потом, я вроде уже писал, что view и task одновременно не передаются. А у вас все равно стоит index.php?option=com_online_ocenka&view=lists&task=lists.remove&cid='.$item->id
А у вас что работает?
Боже упаси! Чтобы я еще поставил себе ваш шедевр.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
Да блин дело до модели вообще еще не доходит!
The requested URL /****/lists.remove was not found on this server.

Но за замечание спасибо, поправил!

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
Шедевр еще не дописан, но ставится и удаляется нормально!
Компонент нужен только для одного сайта.

*

robert

  • Профи
  • ********
  • 4005
  • 371
&view=lists убрали? Если да, то надо указать модели, откуда берется $cid. Потом, если у $cid нет значения по-умолчанию, то нельзя вызвать функцию remove() без аргумента.
ставится и удаляется нормально!
А что там особенного? Joomla сама записывает или удаляет файлы + таблицы, нужно лишь указать правильные пути в XML. А вот код будет работать или нет, ей по фиг.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
view убрали. remove($cid = 0) поставил.

Не срабатывает remove в контроллере!

*

ghostcom

  • Осваиваюсь на форуме
  • ***
  • 54
  • 0
Пошел сдвиг, как я и думал дело в route.php который формирует ссылки!

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

поставил( точнее почистил)

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

Выдал сообщение о удачном удалении, хотя фактически удаление не произошло. Но это уже чтото. Двигаем далее.

Теперь будем разбираться в модели (дальше наверо я и сам справлюсь)
 
Спасибо robert'у!
« Последнее редактирование: 06.09.2016, 19:17:30 от ghostcom »