Вы не авторизованы.
Приветствую!
Не являясь программистом ни по образованию ни по роду деятельности, все ж порой поделываю всякие мелочи в свое удовольствие. И вот задумал переделать пару своих поделок чтоб было все по уму. А это подразумевает использование AJAX. Я безусловно почитаю теорию, т.к. раньше всегда обходил ajax стороной, хоть и понимал что ничего сильно сложного там нет. Но при чтении теории хотелось бы поиметь перед глазами работающий пример. Ну а раз речь о SS5, то и пример хотелось бы поиметь из него. Может есть у кого под рукой плагин (или болванка) который бы используя хук $backend_products.%plugin_id%.toolbar_organize_li открывал диалоговое окно, зачитывал настройки плагина, формировал и отправлял запрос? Естественно, возможны варианты.
Ну или если нет ничего подобного, то может подскажете какой из плагинов в магазине Webasyst работает по такому (ну или приближенному) принципу? Пробежавшись по перечню плагинов не нашел подходящего. А так бы даж купил, расковырял и с ajax'ом разобраться попробовал бы
Спасибо.
Неактивен
wa-apps/shop/plugins/test/js/test.js
$(function(){ $('body').on('click', '.test-plugin.view-config', function() { var link = $(this); link.prepend('<i class="icon16 loading"></i>'); $.get('?plugin=test&action=getConfig', function(response) { link.find('.loading').remove(); $('<h1>Current settings:</h1>' + '<div>' + response + '</div>' + '<p class="red error"></p>') .waDialog({ 'width': '400px', 'height': '200px', 'buttons': '<input type="submit" value="Update settings"> <a href="javascript:void(0)" class="cancel">cancel</a>', onSubmit: function(d) { var dialog = $(d); dialog.find('.cancel').after('<i class="icon16 loading"></i>'); dialog.find('.error').empty(); $.post('?plugin=test&action=saveConfig', $(this).serialize(), function(response) { dialog.find('.loading').remove(); if (response.status == 'fail') { dialog.find('.error').append(response.errors.join('<br>')); } else { dialog.trigger('close'); } }, 'json'); return false; }, onClose: function() { $(this).remove(); } }); }); return false; }); });
wa-apps/shop/plugins/test/lib/actions/backend/shopTestPluginBackendGetConfig.action.php
<?php class shopTestPluginBackendGetConfigAction extends waViewAction { public function execute() { $asm = new waAppSettingsModel(); $this->view->assign('some_setting', $asm->get('shop.test', 'some_setting')); } }
wa-apps/shop/plugins/test/lib/actions/backend/shopTestPluginBackendSaveConfig.controller.php
<?php class shopTestPluginBackendSaveConfigController extends waJsonController { public function execute() { if (strlen($some_setting = waRequest::post('some_setting', '', waRequest::TYPE_STRING_TRIM))) { $asm = new waAppSettingsModel(); $asm->set('shop.test', 'some_setting', $some_setting); } else { $this->errors[] = _wp('Empty setting value!'); } } }
wa-apps/shop/plugins/test/lib/config/plugin.php
<?php return array( 'name' => 'test', 'handlers' => array( 'backend_products' => 'backendProducts', ), );
wa-apps/shop/plugins/test/lib/shopTest.plugin.php
<?php class shopTestPlugin extends shopPlugin { public function backendProducts() { $this->addJs('js/test.js'); return array('toolbar_organize_li' => ' <li> <a href="" class="test-plugin view-config">View plugin config</a> </li> '); } }
wa-apps/shop/plugins/test/templates/actions/backend/BackendGetConfig.html
<div class="field"> <div class="name">[`Some setting`]</div> <div class="value"><input name="some_setting" value="{$some_setting}"></div> </div>
Неактивен
А реально (как) получить даные через ajax с хелпера? для витрины. Например список фильтров для категории.
Ну или любой другой пример с бд.
Неактивен
Хелпер (если вы имеете в виду это), может добавить содержимое на существующую страницу. Таким образом, AJAX-запрос поможет вам лишь получить содержимое такой страницы. В таком случае вам может понадобиться отдельная страница, на которой нет ничего, кроме содержимого, формируемого таким хелпером.
Однако для создания этой страницы всё равно нужен контроллер — PHP-класс, возвращающий (или не возвращающий) какое-то содержимое при запросе определённого URL. А контроллер нужно писать на PHP, как и хелпер. Так что в итоге будет скорее всего проще реализовать нужную логику сразу в виде контроллера, который и вернёт нужное содержимое, а не городить сложную логику в виде "контроллер - HTML-шаблон - хелпер". А собственные контроллеры нужно создавать в рамках плагина. Так что вместо хелпера вам стоит посмотреть в сторону создания плагина.
Или я не так понял ваш вопрос?
Неактивен
rat написал:
Или я не так понял ваш вопрос?
Вопрос поняли, спасибо.
Если не сложно, можете привести пример елементарного плагина который, сможет вывести любые данные (с бд) по ajax на витрине?
Большое спасибо.
Неактивен