Версия NetCat: любая
Статус: бета, требуются доработки
Стоимость внедрения ??? руб.
Этот рецепт можно установить и на ваш сайт. Внедрение производится после 100% предоплаты. Указана стоимость без учета работ по дизайну, каких-либо индивидуальных доработок и при оплате электронными деньгами. Работоспособность гарантирована. Если по каким-либо причинам рецепт не удается установить на ваш сайт, мы возвращаем все деньги.
Быстрее всего заказать внедрение, отправив нам на web@finar.ru письмо с указанием данных произведенного по реквизитам платежа, адреса целевого сайта и доступов в админку и на FTP. Более медленные способы начинаются с письма в свободной форме или с телефонного звонка.
Welcome!
Дата обновления 2011-07-28
Внимание: описание и код рецепта на этой странице могут быть актуальнее архива для скачивания!
К сожалению, пока мы не имеем возможности поддерживать актуальные версии готовых к установке архивов рецептов. Архивы обновляются "при случае", т.е. при существенных доработках, дата обновления прописана в имени архива.
Лицензия и политика использования
Рецепт распространяется под лицензией Creative Commons Share Alike (BY-SA) .
Вы можете безвозмездно использовать исходные коды рецепта на своих сайтах даже в коммерческих целях, сохраняя авторство за нами (ссылки на нашу студию в исходных кодах). Вы можете распространять рецепт или его модификацию, но только на тех же условиях (т.е. продавать их и модификации нельзя).
Мы не даем гарантий работоспособности рецепта и не несем ответственности за возможный ущерб от его применения. Сторонние разработки, использованные в рецепте, могут распространяются под другими лицензиями. Смотрите сайты источников.
Если вам понравился наш рецепт и вы хотите поблагодарить нас, вы можете сделать это следующими способами:
- доработать и улучшить рецепт и выслать нам обновление;
- прислать нам на web@finar.ru ссылку на внедрение (возможно, она появится в списке внедрений);
- на странице вашего сайта поставить ссылку на эту страницу;
- поблагодарить нас рублем, переслав любую сумму на наши электронные счета.
Есть идеи по сотрудничеству? Пишите: web@finar.ru
Этот рецепт можно установить и на ваш сайт. Внедрение производится после 100% предоплаты. Указана стоимость без учета работ по дизайну, каких-либо индивидуальных доработок и при оплате электронными деньгами. Работоспособность гарантирована. Если по каким-либо причинам рецепт не удается установить на ваш сайт, мы возвращаем все деньги.
Быстрее всего заказать внедрение, отправив нам на web@finar.ru письмо с указанием данных произведенного по реквизитам платежа, адреса целевого сайта и доступов в админку и на FTP. Более медленные способы начинаются с письма в свободной форме или с телефонного звонка.
Внимание: описание и код рецепта на этой странице могут быть актуальнее архива для скачивания!
К сожалению, пока мы не имеем возможности поддерживать актуальные версии готовых к установке архивов рецептов. Архивы обновляются "при случае", т.е. при существенных доработках, дата обновления прописана в имени архива.
Представляем вашему вниманию решение, позволяющее вывести в полном отображении объекта сам объект + связанные с ним объекты. Что значит "связанные объекты"? Представим себе интернет-магазин и в нем есть 2 типа товаров: мобильные телефоны и аксессуары для них. При добавлении какого-либо телефона, вы сможете выбрать аксессуары, которые будут выводиться в полном отображение данного телефона (все тоже самое можно будет сделать, если добавляете аксессуар).
Внедрение:
- Создаем новый список:
- В компонент добавляем следующие поля:
Примечание: Поле Aks заполнять, если добавляемый объект является аксессуаром
- В альтернативной форме добавления объекта пишем:
<script>
$('input:checkbox[name=f_Aks]').live('click', function(){
if($('input:checkbox[name=f_Aks]').attr('checked')){
$('span.aks').hide();
$('span.aks > div.scroll > input').attr({checked: ''})
$('span.rollers').show();
}
else{
$('span.aks').show();
$('span.rollers').hide();
$('span.rollers > div.scroll > input').attr({checked: ''})
}
});
</script>
<span class='aks'>
".listQuery("SELECT m.Name, m.Message_ID, s.EnglishName
FROM Message$current_cc[Class_ID] as m
LEFT JOIN Subdivision as s
Using(Subdivision_ID)
WHERE m.Aks=1","<input id='f_Catalog[\$data[Message_ID]]' type='checkbox' name='f_Catalog[\$data[Message_ID]]' value='\$data[Message_ID]'><label for='f_Catalog[\$data[Message_ID]]'><a href='/catalog/\$data[EnglishName]/\$data[EnglishName]_\$data[Message_ID].html' target='_blank'>\$data[Name]</a></label><br/>")."
</span>
<span class='rollers' style='display:none;'>
".listQuery("SELECT m.Name, m.Message_ID, s.EnglishName
FROM Message$current_cc[Class_ID] as m
LEFT JOIN Subdivision as s
Using(Subdivision_ID)
WHERE m.Aks=0", "<input id='f_Catalog[\$data[Message_ID]]' type='checkbox' name='f_Catalog[\$data[Message_ID]]' value='\$data[Message_ID]'><label for='f_Catalog[\$data[Message_ID]]'><a href='/catalog/\$data[EnglishName]/\$data[EnglishName]_\$data[Message_ID].html' target='_blank'>\$data[Name]</a></label><br/>")."
</span>
Примечание: нужно удалить генерацию поля Catalog
- В альтернативной форме изменения объекта пишем:
<span class='aks'>
<div class='scroll'>
".listQuery("SELECT m.Name, m.Message_ID, s.EnglishName
FROM Message$current_cc[Class_ID] as m
LEFT JOIN Subdivision as s
Using(Subdivision_ID)
WHERE m.Aks=1","<input id='f_Catalog[\$data[Message_ID]]' type='checkbox' name='f_Catalog[\$data[Message_ID]]' value='\$data[Message_ID]'><label for='f_Catalog[\$data[Message_ID]]'><a href='/catalog/\$data[EnglishName]/\$data[EnglishName]_\$data[Message_ID].html' target='_blank'>\$data[Name]</a></label><br/>")."
</div>
</span>
<span class='rollers'>
<div class='scroll'>
".listQuery("SELECT m.Name, m.Message_ID, s.EnglishName
FROM Message$current_cc[Class_ID] as m
LEFT JOIN Subdivision as s
Using(Subdivision_ID)
WHERE m.Aks=0", "<input id='f_Catalog[\$data[Message_ID]]' type='checkbox' name='f_Catalog[\$data[Message_ID]]' value='\$data[Message_ID]'><label for='f_Catalog[\$data[Message_ID]]'><a href='/catalog/\$data[EnglishName]/\$data[EnglishName]_\$data[Message_ID].html' target='_blank'>\$data[Name]</a></label><br/>")."
</div>
</span >
<script>
$('input:checkbox[name=f_Aks]').ready(function() {
if($('input:checkbox[name=f_Aks]').attr('checked')){
$('span.aks').hide();
$('span.rollers').show();
}
else{
$('span.aks').show();
$('span.rollers').hide();
}
}).live('click', function(){
if($('input:checkbox[name=f_Aks]').attr('checked')){
$('span.aks').hide();
$('span.aks > div.scroll > input').attr({checked: ''})
$('span.rollers').show();
}
else{
$('span.aks').show();
$('span.rollers').hide();
$('span.rollers > div.scroll > input').attr({checked: ''});
}
});
</script>
";
$f_Catalog = explode(",", $f_Catalog);
$f_Catalog = array_slice($f_Catalog, 1, -1);
$js_obj = json_encode($f_Catalog);
echo "<script language='javascript'>
var obj=$js_obj;
jQuery.each(obj, function(indx, element){
$('input:checkbox[value='+element+']').attr({checked: 'checked'});
});
</script>";
echo "
Примечание: нужно удалить генерацию поля Catalog
- В макет дизайна вашего сайта добавим следующий класс:
.scroll{
overflow: auto;
width: 300px;
height:50px;
}
Примечание: при добавлении этого стиля, у нас будет выводится прокрутка, если объектов очень много. Если вы хотите избавиться от этого и получить огромнейшую по длине страницу, то тогда не вносите этот стиль в макет дизайна.
- Переходим к шаблону отображения одного объекта на отдельной странице:
".($catalNum ? ($f_Aks ? "<h2>Телефоны:</h2>" : "<h2>Аксессуары:</h2>") :NULL)."
";
$catalNum = explode(",", $catalNum);
$catalNum = array_slice($catalNum, 1, -1);
foreach($catalNum as $num)
echo s_list_class($sub, $cc, "isTitle=$num&nc_ctpl=194");
echo "
Примечание: вместо nc_ctpl=194
нужно будет вписать номер своего шаблона, который создадим далее
- В системных настройках пишем:
if($message){
$query_select= "Catalog";
$query_from= `Message187`;
$query_where= "`Message_ID`= $message";
$result_vars = '$catalNum';}
Примечание: вместо Message187
запишите номер своего компонента. Например, Message49
- Создаем шаблон компонента:
".($isTitle == $f_RowID ? "
Ваш код для отображения списка объектов
" : NULL )."
Примечание: в шаблоне компонента можно установить количество выводимых связанных объектов. Для этого нужно заполнить поле "Показывать по N объектов на странице". Допустим, мы хотим выводить 6 связанных объектов. Для этого нужно в поле вписать 7 (т.е. 6 связанных + сам объект)
To-do:
- Не очень здорово, что s_list_class засунут в цикл. Если будет выводиться большее количество объектов, то, скорее всего, из-за огромного количества запросов будут лаги. Попробовать исправить эту проблему можно так:
Вместо кода в отображении объекта пишем:
";
$catalNum = explode(",", $catalNum);
$catalNum = array_slice($catalNum, 1, -1);
foreach($catalNum as $num)
$whr[] = "Message_ID=$num OR";
$where = implode(" ", $whr);
$where = substr($where, 0, -2);
В результате получаем один запрос такого типа: SELECT * FROM Message?? WHERE $where
Следовательно, шаблон компонента нам уже не нужен и оформление вывода нужно писать в отображении объекта.
- Хорошо бы придумать, как вывести ссылку на все объекты. Ведь если их много, то все выводить сразу смысла нет, да и не красиво :)
внедрено на tres-bebe.ru
Оставить комментарий