Новостной слайдер

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

Вывод статей из определенных категорий

#1 15 февраля 2012 в 01:40
Здравствуйте
Однажды мне уже ответили как выводить на этот слайдер demo.webdeveloperplus.com/featured-content-slider/ статьи из определённых категорий
/modules/mod_latestslider.php находим
  1.  
  2. WHERE con.published = 1 AND con.showlatest = 1
  3.  
добавляем к этой строчке

  1. AND con.category_id=4
Подробно тут instantcms.ru/forum/thread9347.html Все вышло и заработало. Теперь появилась нужда выводить статьи из нескольких категорий.

Я сделал так
  1. WHERE con.published = 1 AND con.showlatest = 1 AND con.category_id IN (10, 11, 12, 13, 14, 15, 16, 17)
Все работает, только вся главная страничка, вернее её шрифт стал "жирный", почему не знаю. Как правильно написать код? Я не программист не знаю!

Темы с которой я копировал слайдер походу дела нету,
instantcms.ru/blogs/s-mira-po-nitke/slaider-novostei-ochrednoi.html

Спасибо, очень жду ответа

Если что вот целый код module.php

  1. <?php
  2. function mod_latestslider($module_id){
  3. $inCore = cmsCore::getInstance();
  4. $inDB = cmsDatabase::getInstance();
  5. $cfg = $inCore->loadModuleConfig($module_id);
  6. global $_LANG;
  7. if (!isset($cfg['maxlen'])) { $cfg['maxlen'] = 150;}
  8. $today = date("Y-m-d H:i:s");
  9. $sql = "
  10. SELECT con.*, con.id as slid, con.pubdate as fdate, u.nickname as author, u.login as author_login
  11. FROM cms_content con
  12. LEFT JOIN cms_category cat ON cat.id = con.category_id
  13. LEFT JOIN cms_users u ON u.id = con.user_id
  14. WHERE con.published = 1 AND con.showlatest = 1 AND con.category_id IN (10, 11, 12, 13, 14, 15, 16, 17)
  15. AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '".$today."' AND con.pubdate <= '".$today."'))
  16. ORDER BY con.pubdate DESC LIMIT 4";
  17.  
  18. $result = $inDB->query($sql);
  19. $is_slider = false;
  20. if ($inDB->num_rows($result)){
  21. $slider = array();
  22. $is_slider = true;
  23. while($con = $inDB->fetch_assoc($result)){
  24. $next = sizeof($slider);
  25. if(strlen($con['content'])>$cfg['maxlen']){
  26. $con['content'] = substr($con['content'], 0, $cfg['maxlen']) . '...';
  27. }
  28. $slider[$next]['title'] = substr($con['title'], 0, 75) . '...';
  29. $slider[$next]['content'] = $con['content'];
  30. $slider[$next]['id'] = $con['id'];
  31. $slider[$next]['seolink'] = $con['seolink'];
  32. }
  33. }
  34.  
  35. $smarty = $inCore->initSmarty('modules', 'mod_latestslider.tpl');
  36. $smarty->assign('slider', $slider);
  37. $smarty->assign('is_slider', $is_slider);
  38. $smarty->display('mod_latestslider.tpl');
  39. return true;
  40. }
  41. ?>
#2 15 февраля 2012 в 02:06
здесь вряд ли что то переопределяется, может в файле шаблона mod_latestslider.tpl
#3 15 февраля 2012 в 02:16
хм… сделал как у Вас, все корректно отображается. Попробуйте вернуть все обратно, т.е. AND con.category_id=10, жирный шрифт пропадает?
#4 15 февраля 2012 в 02:17
Если ставлю как раньше id=4 (вывод с одной категории) все хорошо, шрифт не меняется.
Когда ставлю см.выше много категорий, шрифт меняется.

Когда отключаю модуль, то текст становиться обычным (как нужно)

Может ...ategory_id IN (10, 11,… ( Не IN а другой код?)

Вот файл mod_latestslider.tpl

  1. {literal}
  2. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.5.3/jquery-ui.min.js" ></script>
  3. <script type="text/javascript">
  4. $(document).ready(function(){
  5. $("#featured > ul").tabs({fx:{opacity: "toggle"}}).tabs("rotate", 5000, true);
  6. });
  7. </script>
  8. {/literal}
  9.  
  10. {if $is_slider}
  11. <div id="featured">
  12. <ul class="ui-tabs-nav">
  13. {foreach key=id item=title from=$slider}
  14. <li class="ui-tabs-nav-item ui-tabs-selected" id="nav-fragment-{$title.id}"><a href="#fragment-{$title.id}"><img src="/images/photos/small/article{$title.id}.jpg" alt="" width="50px" height="50px" /><span class="ttl">{$title.title}</span></a></li>
  15. {/foreach}
  16. </ul>
  17. {foreach key=id item=title from=$slider}
  18. <div id="fragment-{$title.id}" class="ui-tabs-panel" style="">
  19. <a href="/{$title.seolink}.html" style="border-radius: 8px; overflow: hidden; display: block;">
  20. <img src="/images/photos/medium/article{$title.id}.jpg" alt="" width="350px" /></a>
  21. <div class="info" >
  22. <!-- <a href="#" >{$title.title}</a> -->
  23. <p><a href="/{$title.seolink}.html" >{$title.content}</a></p>
  24. </div>
  25. </div>
  26. {/foreach}
  27.  
  28. </div>
  29. {/if}
#5 15 февраля 2012 в 02:24
PrazdNik, Поставил, как вы сказали, все хорошо, выводит только из 10-й категории, жирный шрифт пропадает. Появляется, когда ставлю
  1. WHERE con.published = 1 AND con.showlatest = 1 AND con.category_id IN (10, 11, 12, 13, 14, 15, 16, 17)
Попробовал по одной обирать категории и смотреть, что выходит

  1. WHERE con.published = 1 AND con.showlatest = 1 AND con.category_id IN (10, 11, 12, 13, 14)
, если не ставить 15,16,17 то без жирного шрифта все.
15,16,17 это ID очень важных для меня категорий
#6 15 февраля 2012 в 03:13
попробуйте так…
  1. WHERE con.published = 1 AND con.showlatest = 1 AND con.category_id BETWEEN 10 AND 17
#7 15 февраля 2012 в 03:16
вполне возможно что в новостях из категорий 15, 16, или 17, содержится html код переопределяющий стиль остального документа…
#8 15 февраля 2012 в 03:17
например лишний открывающий тег или, наоборот закрывающий…
#9 15 февраля 2012 в 03:30
у вас же обрезка идёт в двух местах:
  1.  
  2. $con['content'] = substr($con['content'], 0, $cfg['maxlen']) . '...';
  3. }
  4. $slider[$next]['title'] = substr($con['title'], 0, 75) . '...';
  5.  
#10 15 февраля 2012 в 07:55
лучше это делать через админку (выбор категорий) как сделать опишу на днях — ближе к выходным
#11 15 февраля 2012 в 14:39
• Mike •, прав на 100%

проблема не в категориях а не в грамотной обрезке текста.
  1. $con['content'] = substr($con['content'], 0, $cfg['maxlen']) . '...';
  2. }
  3. $slider[$next]['title'] = substr($con['title'], 0, 75) . '...';
У вас просто напросто вырезает закрывающий тег и следовательно у вас будет следующее что весь текст автоматически закроется тегом например <strong>
#12 15 февраля 2012 в 21:05
Спасибо большое все, кто помогал!!!

P.S.
А можно сделать, что бы не вырезало? Сложный код нужен?
#13 15 февраля 2012 в 23:04


Спасибо большое все, кто помогал!!!

P.S.
А можно сделать, что бы не вырезало? Сложный код нужен?

Daze77

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

ps — как вариант (что то я про него и забыл) есть такая функция (я гдето встречал тут) которая с текста сначала вырезает все html теги (стили, картинки и так далее) — так вот сначало прогнать ей текст статьи, потом урезать до колличества символов — это как вариант (и почему то этот вариант, мне кажется, вам подойдёт)
#14 16 февраля 2012 в 00:45
Sergey Platonov, Для меня это слишком сложно :)
Спасибо большое
#15 16 февраля 2012 в 02:29
замените три строчки:
  1.  
  2. if( strlen( strip_tags( $con['content'] ) ) > $cfg['maxlen'] ) {
  3. $con['content'] = substr( strip_tags( $con['content'] ), 0, $cfg['maxlen'] ) . '...'; }
  4. $slider[$next]['title'] = substr( strip_tags( $con['title'] ), 0, 75 ) . '...';
  5.  
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.