программинг своего модуля

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
User avatar
negrem
Forum Members
Forum Members
Posts: 29
Joined: Tue Sep 14, 2010 10:36 am

программинг своего модуля

Post by negrem »

Всем ДД!
Пишу свой модуль для CMSMS основу всю сделал, но вот загвоздка..
нужно сделать чтоб нажимая на определенные ссылки появлялась страница новая
нашел как сделать иклюд новой странице но она появлется сверху уже имеющийся
МОжет кто юзал и знает как это обойти..
Sonya

Re: программинг своего модуля

Post by Sonya »

negrem wrote:Всем ДД!
Пишу свой модуль для CMSMS основу всю сделал, но вот загвоздка..
нужно сделать чтоб нажимая на определенные ссылки появлялась страница новая
нашел как сделать иклюд новой странице но она появлется сверху уже имеющийся
МОжет кто юзал и знает как это обойти..
Без конкректного примера сложно сказать, что Вы там делаете. Смотрите API
Метод CMSModule::CreateFrontendLink подменяет выдачу модуля, если inline=true или выдачу всего содержимого ({content}), если false
Метод CMSModule::Redirect переводит на другую страницу.
User avatar
negrem
Forum Members
Forum Members
Posts: 29
Joined: Tue Sep 14, 2010 10:36 am

Re: программинг своего модуля

Post by negrem »

Спасибо!
Именно CMSModule::Redirect мне и нужен был, просто правильный синтаксис найти не мог
User avatar
negrem
Forum Members
Forum Members
Posts: 29
Joined: Tue Sep 14, 2010 10:36 am

Re: программинг своего модуля

Post by negrem »

Оказалось все не так просто
создал ссылку на редактирование материала
$editur[$row['id']] = $this->CreateLink($id, 'defaultadmin', $returnid, $gCms->variables['admintheme']->DisplayImage('icons/system/edit.gif', $this->Lang('edit'),'','','systemicon'), array('editid'=>$ecity_ur_id[$row['id']]));

и затем проверим значение показываю форму редактирования с другой странице..
if (isset($params['editid'])) {

$smarty =& $this->smarty;
$smarty->assign('defaulttemplateform_title',$title);
$smarty->assign('info_title',$info);
$smarty->assign('startform',
$this->CreateFormStart($id,'setdefaulttemplate',$returnid,'post','',false,'',
array('prefname'=>$prefname,
'active_tab'=>$active_tab,
'filename'=>$filename)));
$smarty->assign('editing',$this->Lang('editing'));
$smarty->assign('input_template', $this->CreateInputText($id, 'event_name', $ecity_ur[$params['editid']], 30));
//$smarty->assign('input_template',$this->CreateInputText(false,$id,
// $this->GetPreference($prefname),
//'input_template'));
$smarty->assign('submit',$this->CreateInputSubmit($id,'submit',$this->Lang('submit')));
$smarty->assign('cancel',$this->CreateInputSubmit($id,'submit',$this->Lang('cancel')));

$smarty->assign('endform',
$this->CreateFormEnd());
echo $this->ProcessTemplate('edit.tpl');

}


взял для примера новостной блок

Но все равно выводя эту форму, она показывается в верхней части а нижнаяя часть остается.(см изображение)

Как можно показать эту форму но чтоб нижняя часть не показывалась..
Image
Sonya

Re: программинг своего модуля

Post by Sonya »

negrem wrote:Оказалось все не так просто
Как можно показать эту форму но чтоб нижняя часть не показывалась..
Оказалось, что Вы в административной панели, а я сначала подумала, что ссылка нужна во фронтенде. Не совсем понятна Ваша структура, вот, например, edit.tpl что содержит? Я обычно под каждую страницу делаю свой action, чтобы не пихать в defaultadmin все подряд. То есть, создаю ссылку:

Code: Select all

$editur[$row['id']] = $this->CreateLink($id, 'edit', $returnid, $gCms->variables['admintheme']->DisplayImage('icons/system/edit.gif', $this->Lang('edit'),'','','systemicon'), array('editid'=>$ecity_ur_id[$row['id']]));
А код обрабатываю в файле action.edit.php соотвественно, т. е. получается под каждую страницу, один шаблон и один файл с кодом:
defaultadmin.action.php + admin.tpl
edit.action.php + edit.tpl
add.action.php + add.tpl
и так далее.
negrem wrote:и затем проверим значение показываю форму редактирования с другой странице.
Вот это неверно, Вы своей ссылкой на ту же страницу defaultadmin пересылаете, а не на другую, т. е. по сути просто defaultadmin перезагружаете, а в моем примере была бы на самом деле новая страница + отдельный шаблон.
User avatar
negrem
Forum Members
Forum Members
Posts: 29
Joined: Tue Sep 14, 2010 10:36 am

Re: программинг своего модуля

Post by negrem »

да все разобрался, а то незнал как кидать в др файлы. СПасибо большое!
тоже сделал как правильно, а то девалтадмин весь забит был.
User avatar
negrem
Forum Members
Forum Members
Posts: 29
Joined: Tue Sep 14, 2010 10:36 am

Re: программинг своего модуля

Post by negrem »

Возникла проблема с пользовательной стороной..
Пробывал сам разобраться но так что то ничего не получилось.

В крации: вывожу 6 зависимых селектов, которые берут данные с базы.
В зависимости от выбранного элемента меняется следующий.
Использую json и именно из-за этого думаю не работает вся система.

//беру с базы что надо
$ko = array();
while ($row = mysql_fetch_array($result))
{$ko[$row['id']] = $row['name'];}
echo json_encode($ko);
}



// функция вывода данных селекта
function loadKo(select)
{var koSelect = $('select[name="ko"]');
koSelect.attr('disabled', 'disabled'); // делаем список городов не активным
// послыаем AJAX запрос, который вернёт список городов для выбранной области
$.getJSON('index.php', {action:'getKo', id:select.value}, function(koList){
koSelect.html(''); // очищаем список городов
// заполняем список городов новыми пришедшими данными
$.each(koList, function(i2){
koSelect.append('<option value="' + i2 + '">' + this + '</option>'); });
koSelect.removeAttr('disabled'); // делаем список городов активным
});
}



Скрипт взял готовый в инете и переделал как мне надо, если просто запустить скрипт без cms все отлично работает.
Скрипт использует jquery библиотеку.

Пробывал прикручивать с использованием шаблона но подумал может нужно там как то показывать данные какие то дополнительные для json, затем попробывал простым include'ом вывести..всё выводиться но селекты не активны и показывает что данные не поступают через json запросы.

Может какие-то надо прописать что использую json или даже в крайнем случае можно показать через iframe как то?
butcher_88
Forum Members
Forum Members
Posts: 113
Joined: Tue Jun 22, 2010 11:05 am

Re: программинг своего модуля

Post by butcher_88 »

negrem wrote: $.getJSON('index.php', {action:'getKo', id:select.value}, function(koList){
Ну во-первых JSON не использовал так что особенностей не знаю, однако мне кажется что вы запрос к неправильному файлу отправляете?
И еще идее для обычной ajax загрузки пример:

Code: Select all

 var tmp = url + "&showtemplate=false";
 var tmp2 = tmp.replace(/amp;/g,'');
 $(dest).load(tmp2); 
1) "&showtemplate=false" - не обрабатывать шаблон - получить только сам вывод модуля, не забывайте это добавлять)))
2) url - нужный урл - т.е. по которому cms выполнит требуемые действия - можете проверить просто перейдя по ссылке вручную и добавив в action модуля тестовый вывод...
3) var tmp2 = tmp.replace(/amp;/g,''); - а тут просто убираем все &
User avatar
negrem
Forum Members
Forum Members
Posts: 29
Joined: Tue Sep 14, 2010 10:36 am

Re: программинг своего модуля

Post by negrem »

да я тоже так думал, поменял пути к файлу которому ответ возравщяется но все равно не работает.
Если просто запустить файл отдельно один и тот же, изменив конечно подключение к базе
то просто работает отлично
а внутри модуля все равно не работает
butcher_88
Forum Members
Forum Members
Posts: 113
Joined: Tue Jun 22, 2010 11:05 am

Re: программинг своего модуля

Post by butcher_88 »

negrem wrote:да я тоже так думал, поменял пути к файлу которому ответ возравщяется но все равно не работает.
Если просто запустить файл отдельно один и тот же, изменив конечно подключение к базе
то просто работает отлично
а внутри модуля все равно не работает
А конкретно можете показать какого вида ссылка? (не забывайте чято там не путь к файлу ап ссылка фронтенда вида:
http://vasya.ru/index.php?mact=ModuleNa ... 22&page=22
ну или можно наверное аналог с pretty_url
Post Reply

Return to “Russian - русский”