BODY для трехколоночного v.1.9.1 новый Smarty

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Как сделать трехколоночный вывод в шаблоне, на новом Smarty

#1 9 июля 2012 в 11:51
Подскажите пожалуйста кто знает, как сделать вывод трехколоночной структуры на новом Smarty для шаблона v.1.9.1
на этом примере:
  1. <?php if ($mod_count['left']) { ?>
  2. <?php if ($mod_count['sidebar']){ ?>
  3. <!-- ***************** all ******************* -->
  4.  
  5. <!-- ************************************ -->
  6. <?php } else { ?>
  7. <!-- ****************** left center ****************** -->
  8.  
  9. <!-- ************************************ -->
  10. <?php } ?>
  11. <?php } else { ?>
  12. <?php if ($mod_count['sidebar']){ ?>
  13. <!-- ****************** center right****************** -->
  14.  
  15. <!-- ************************************ -->
  16. <?php } else { ?>
  17. <!-- ****************** center ****************** -->
  18.  
  19. <!-- ************************************ -->
  20. <?php } ?>
  21. <?php } ?>
Два вечера сижу, ни как не получается. Пробовал по разному, но или ошибка, или только одна колонка…
#3 9 июля 2012 в 12:02
• Ɍɕβoṙη •, отличие есть, вот вывод для двухколоночного дефолтного:
  1. <div id="mainbody" class="container_12">
  2. <div id="main" class="{if $count_sidebar != 0}grid_8{else}grid_12{/if} count{$count_sidebar}">
  3.  
  4. {if $count_maintop > 0}
  5. {print_modules position="maintop"}
  6. {/if}
  7.  
  8. {if $messages}
  9. <div class="sess_messages">
  10. {foreach $messages as $message}
  11. {$message}
  12. {/foreach}
  13. </div>
  14. {/if}
  15.  
  16. {print_body}
  17.  
  18. {if $count_mainbottom > 0}
  19. {print_modules position="mainbottom"}
  20. {/if}
  21.  
  22. </div>
  23.  
  24. {if $count_sidebar > 0}
  25. <div class="grid_4" id="sidebar">{print_modules position="sidebar"}</div>
  26. {/if}
  27.  
  28. </div>
  29. </div>
  30. <div class="pad"></div>
<?php не используется.
#4 9 июля 2012 в 12:56
делал трехколоночный макет для twitter bootstrap, в нем сетка по другому называется но суть будет понятна…

  1.  
  2.  
  3. <div class="row-fluid">
  4.  
  5. {if $count_sidebar_left > 0}
  6. <div class="span3">
  7. {print_modules position="sidebar_left"}
  8. </div>
  9. {/if}
  10.  
  11. <div class="{if $count_sidebar_left != 0 }{if $count_sidebar_right != 0 }span6{else}span9{/if}{elseif $count_sidebar_right != 0}{if $count_sidebar_left != 0 }span6{else}span9{/if}{else}span12{/if}">
  12. {if $count_maintop > 0}
  13. {print_modules position="maintop"}
  14. {/if}
  15.  
  16. {if $messages}
  17. <div class="sess_messages">
  18. {foreach $messages as $message}
  19. {$message}
  20. {/foreach}
  21. </div>
  22. {/if}
  23.  
  24. {print_body}
  25.  
  26. {if $count_mainbottom > 0}
  27. {print_modules position="mainbottom"}
  28. {/if}
  29.  
  30. <div class="row-fluid">
  31. {print_pathway separator="—›"}
  32. </div>
  33. </div>
  34. {if $count_sidebar_right > 0}
  35. <div class="span3">
  36. {print_modules position="sidebar_right"}
  37. </div>
  38. {/if}
  39.  
  40. </div>
  41.  

основное тут

<div class="{if $count_sidebar_left != 0 }{if $count_sidebar_right != 0 }span6{else}span9{/if}{elseif $count_sidebar_right != 0}{if $count_sidebar_left != 0 }span6{else}span9{/if}{else}span12{/if}">

шаблон имеет 12 колонок
для левого или правого сайдбара отведено по три колонки
проверяем есть ли модули в левом сайдбаре, если есть задаем центральной области ширину в 9 колонок

теперь перед тем как задать центру ширину проверяем есть ли модули в правом сайдбаре и если есть то
центральной области задаем ширину 6

и последняя проверка, если есть модули в правом сайдбаре, и нет модулей в левом, то центральной области задаем ширину 9

если ни одно из условий не выполнено центральной области будет задана ширина 12

Переделать под любую сетку — дело пяти минут…

span заменить на grid… или пересчитать если сетка на 16, 24 колонок…
#5 9 июля 2012 в 13:04
mexanik, Спасибо (+)
Попробую разобраться…
#6 9 июля 2012 в 13:10
skaz, может так будет понятней

отформатировал код (просто для красоты вывода в шаблоне все лишние пробелы были убраны)

  1.  
  2.  
  3. <div class="
  4.  
  5. {if $count_sidebar_left != 0 }
  6.  
  7. {if $count_sidebar_right != 0 }
  8. span6
  9. {else}
  10. span9
  11. {/if}
  12.  
  13. {elseif $count_sidebar_right != 0}
  14.  
  15. {if $count_sidebar_left != 0 }
  16. span6
  17. {else}
  18. span9
  19. {/if}
  20.  
  21. {else}
  22. span12
  23. {/if}
  24.  
  25. ">
  26.  
  27.  
#7 9 июля 2012 в 13:13
можно было бы упростить, сделать проверку модулей в сайдбарах сразу в правом и левом, но смарти не понимает оператора and zlo

пришлось извращаться…
#8 9 июля 2012 в 13:37
mexanik, все вроде понятно...
а вот допустим

span6

span9

у меня

ellayout-cell elcontent style="width:500px;"
ellayout-cell elcontent style="width:750px;"
то есть задение ширины будет понимать, или вынести в стили? потому что у меня стиль один (хотя конечно можно и задать разные)
#9 9 июля 2012 в 13:58

ellayout-cell elcontent style="width:500px;" ellayout-cell elcontent style="width:750px;"


все понял так не будет, задал через стили.
Все работает dance
mexanik, ещё раз спасибо, наверно многим понадобится.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.