Page 1 of 1

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

Posted: Fri Jan 14, 2011 12:51 pm
by negrem
Всем ДД!
Пишу свой модуль для CMSMS основу всю сделал, но вот загвоздка..
нужно сделать чтоб нажимая на определенные ссылки появлялась страница новая
нашел как сделать иклюд новой странице но она появлется сверху уже имеющийся
МОжет кто юзал и знает как это обойти..

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

Posted: Fri Jan 14, 2011 1:07 pm
by Sonya
negrem wrote:Всем ДД!
Пишу свой модуль для CMSMS основу всю сделал, но вот загвоздка..
нужно сделать чтоб нажимая на определенные ссылки появлялась страница новая
нашел как сделать иклюд новой странице но она появлется сверху уже имеющийся
МОжет кто юзал и знает как это обойти..
Без конкректного примера сложно сказать, что Вы там делаете. Смотрите API
Метод CMSModule::CreateFrontendLink подменяет выдачу модуля, если inline=true или выдачу всего содержимого ({content}), если false
Метод CMSModule::Redirect переводит на другую страницу.

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

Posted: Fri Jan 14, 2011 1:11 pm
by negrem
Спасибо!
Именно CMSModule::Redirect мне и нужен был, просто правильный синтаксис найти не мог

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

Posted: Sat Jan 15, 2011 4:45 am
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

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

Posted: Sat Jan 15, 2011 1:58 pm
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 перезагружаете, а в моем примере была бы на самом деле новая страница + отдельный шаблон.

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

Posted: Mon Jan 17, 2011 4:36 am
by negrem
да все разобрался, а то незнал как кидать в др файлы. СПасибо большое!
тоже сделал как правильно, а то девалтадмин весь забит был.

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

Posted: Mon Jan 17, 2011 5:21 am
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 как то?

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

Posted: Mon Jan 17, 2011 7:15 am
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,''); - а тут просто убираем все &

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

Posted: Mon Jan 17, 2011 9:47 am
by negrem
да я тоже так думал, поменял пути к файлу которому ответ возравщяется но все равно не работает.
Если просто запустить файл отдельно один и тот же, изменив конечно подключение к базе
то просто работает отлично
а внутри модуля все равно не работает

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

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