А у нас новый сайт ----------------> www.ph-ph.ru!
Finar.ru
web.finar.ru
video.finar.ru
Темы для BootstrapNew!

NetCat-LinkedObjects

Версия NetCat: любая
Статус: бета, требуются доработки
Стоимость внедрения ??? руб.

Этот рецепт можно установить и на ваш сайт. Внедрение производится после 100% предоплаты. Указана стоимость без учета работ по дизайну, каких-либо индивидуальных доработок и при оплате электронными деньгами. Работоспособность гарантирована. Если по каким-либо причинам рецепт не удается установить на ваш сайт, мы возвращаем все деньги.

Быстрее всего заказать внедрение, отправив нам на web@finar.ru письмо с указанием данных произведенного по реквизитам платежа, адреса целевого сайта и доступов в админку и на FTP. Более медленные способы начинаются с письма в свободной форме или с телефонного звонка.

Welcome!

Дата обновления 2011-07-28

Внимание: описание и код рецепта на этой странице могут быть актуальнее архива для скачивания!

К сожалению, пока мы не имеем возможности поддерживать актуальные версии готовых к установке архивов рецептов. Архивы обновляются "при случае", т.е. при существенных доработках, дата обновления прописана в имени архива.

Внедрения

Лицензия и политика использования

Разработчикам сайтов:

Рецепт распространяется под лицензией Creative Commons Share Alike (BY-SA) .

Вы можете безвозмездно использовать исходные коды рецепта на своих сайтах даже в коммерческих целях, сохраняя авторство за нами (ссылки на нашу студию в исходных кодах). Вы можете распространять рецепт или его модификацию, но только на тех же условиях (т.е. продавать их и модификации нельзя).

Мы не даем гарантий работоспособности рецепта и не несем ответственности за возможный ущерб от его применения. Сторонние разработки, использованные в рецепте, могут распространяются под другими лицензиями. Смотрите сайты источников.

Если вам понравился наш рецепт и вы хотите поблагодарить нас, вы можете сделать это следующими способами:

  1. доработать и улучшить рецепт и выслать нам обновление;
  2. прислать нам на web@finar.ru ссылку на внедрение (возможно, она появится в списке внедрений);
  3. на странице вашего сайта поставить ссылку на эту страницу;
  4. поблагодарить нас рублем, переслав любую сумму на наши электронные счета.

Есть идеи по сотрудничеству? Пишите: web@finar.ru

Владельцам сайтов:

Этот рецепт можно установить и на ваш сайт. Внедрение производится после 100% предоплаты. Указана стоимость без учета работ по дизайну, каких-либо индивидуальных доработок и при оплате электронными деньгами. Работоспособность гарантирована. Если по каким-либо причинам рецепт не удается установить на ваш сайт, мы возвращаем все деньги.

Быстрее всего заказать внедрение, отправив нам на web@finar.ru письмо с указанием данных произведенного по реквизитам платежа, адреса целевого сайта и доступов в админку и на FTP. Более медленные способы начинаются с письма в свободной форме или с телефонного звонка.

Welcome!


Внимание: описание и код рецепта на этой странице могут быть актуальнее архива для скачивания!

К сожалению, пока мы не имеем возможности поддерживать актуальные версии готовых к установке архивов рецептов. Архивы обновляются "при случае", т.е. при существенных доработках, дата обновления прописана в имени архива.

Представляем вашему вниманию решение, позволяющее вывести в полном отображении объекта сам объект + связанные с ним объекты. Что значит "связанные объекты"? Представим себе интернет-магазин и в нем есть 2 типа товаров: мобильные телефоны и аксессуары для них. При добавлении какого-либо телефона, вы сможете выбрать аксессуары, которые будут выводиться в полном отображение данного телефона (все тоже самое можно будет сделать, если добавляете аксессуар).

Внедрение:

1. Catalog (оставляем его пустым, не добавляя никаких элементов)
  • В компонент добавляем следующие поля:
1. Aks (Тип поля: Логическая переменная, обязательно для заполнения)
2. Catalog (Тип поля: Множественный выбор, Формат: Catalog)

Примечание: Поле 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

Оставить комментарий 


Ваше имя:
->