Категории |
Плагин "Облако категорий"Данный плагин выводит облако категорий и подкатегорий. вывод в шаблон {box_CAT_CLOUD} ? ой ;) Да) Спасибо! нужный плагин. сейчас потестим. спасибо! посмотрел код. Настройку пока не вынес в плагин. Если надо, то вынесу. Настройка всего одна - мин и макс размер шрифта - MIN_FONT_SIZE и MAX_FONT_SIZE, соответственно. Таки выноси. Надо еще максимальное число показываемых категорий определить типа $MAX_DISPLAY_CATS = '20'; ... ...ORDER BY RAND() DESC LIMIT " . $MAX_DISPLAY_CATS; И зачем кэшировать данные случайной выборки? tulgha, а как не кэшировать случайную выборку? 1. Не понимаю, если случайная выборка, зачем кэшировать? Если кэшировать, зачем случайная выборка? Тут - "или крестик, или трусы". ; $_box_value = $box->fetch('box_cat_cloud.html',$cache_id); }*/ закомментированное - выкинуть. 2.У меня их достаточно много, у некоторых товарищей - намного больше. Зачем нам растягивать столбец, шапку или подвал тьмой категорий? Кому не надо, тот и не будет трогать настройки. Мне - надо. Надо еще обрезание названия категории сделать настраиваемое, есть особенно длинные по названию категории, . А. ну я подумал, что можно как-то не кэшировать именно случайность выборки, а остальное в кэш. Ок. Обрезание делать через os_truncate? Наверное да, я не разбирался как это делается. Надо смотреть чем делается обрезание новостей, статей и т.п. И не забывать, что обрезание должно быть мультибайтным, чтобы не вылезали ромбики с вопросами. А если делать обрезание через mb_substr? Да не должно быть. Но! Дополнение PHP mb_string может быть выключено, значит обработку должна взять на себя функция-прослойка: если mb_string не выключен и если mb_substr не выключен, то используем mb_substr, иначе обрабатываем внутри функции на костылях. {$module_data.NEWS_CONTENT|os_truncate:$smarty.const.MAX_DISPLAY_LATEST_NEWS_CONTENT:" ..."} Получается, через Смарти. Стало быть, надо хранить параметр типа MAX_DISPLAY_CAT_CLOUD_CAT_NAME, а в шаблоне прописать {$box_content.NAME|os_truncate:$smarty.const.MAX_DISPLAY_CAT_CLOUD_CAT_NAME:" ..."} Я просто прошелся поиском по файлам шопоса и нашел mb_substr в нескольких файлах. И подумал его использовать) Не могу придумать, как из плагина передавать MAX_DISPLAY_CAT_CLOUD_CAT_NAME в файл шаблона, чтобы заработала конструкция {$box_content.NAME|os_truncate:$smarty.const.MAX_DISPLAY_CAT_CLOUD_CAT_NAME:" ..."} А разве такая конструкция не работает? get_conf_value() { if (!isset ($this->max_display_name)) { $conf_value_query= os_db_query("SELECT configuration_value from ".TABLE_CONFIGURATION." WHERE configuration_key = 'MAX_DISPLAY_CAT_CLOUD_CAT_NAME'"); $this->max_display_name = os_db_num_rows($conf_value_query); } return $this->max_display_name; } $box->assign('MAX_DISPLAY_CAT_CLOUD_CAT_NAME', $this->max_display_name); хм. делать еще один запрос ради обрезания названия? Все оказалось намного проще) Странно, см. http://www.tvsat.kz А у меня криво. Сейчас у меня прописано {$box_content.NAME|os_truncate:25:" ...":true} Игрался с этим параметром - всё нормально. Вот когда os_truncate вынес в index.html - пропали ссылки. Обновил плагин. Добавились настройки. Вот когда os_truncate вынес в index.html - пропали ссылки. Что значит в index.html? Вот когда os_truncate вынес в index.html - пропали ссылки. Что значит в index.html? Так {$box_CAT_CLOUD|os_truncate:200:" ...":true} так а толку от это? Ничего не даст os_truncate надо вешать именно на метку выводящую текст который надо резать. Вот это (строки за комментированием ) //->if (!CacheCheck()) { $box->caching = 0; $_box_value = $box->fetch('box_cat_cloud.html'); //->} зачем? Ведь получатся, что если кэш включен, то запрещаем вывод! сори. забыл убрать вчера. запарился с настройками) В шаблоне я сделал так Ага. Примерно так: в PHP $query = "SELECT c.categories_id, cd.categories_name, cd.categories_heading_title, count(*) AS c FROM ".TABLE_CATEGORIES." AS c, ".TABLE_CATEGORIES_DESCRIPTION." AS cd, ".TABLE_PRODUCTS_TO_CATEGORIES." AS p2c WHERE c.categories_id = cd.categories_id ".(empty($show_sub_cat) ? 'AND c.parent_id = ("0")':'')." AND ".$group_check." c.categories_status = '1' AND p2c.categories_id=c.categories_id AND cd.language_id = '" .(int) $_SESSION['languages_id']. "' GROUP BY c.categories_id ORDER BY ".$sort_cat." LIMIT " . get_option('max_display_cats'); $query = osDBquery($query); while ($cat = os_db_fetch_array($query, true)) { $cat_link = os_category_link($cat['categories_id'],$cat['categories_name']); $cat_name = mb_substr($cat['categories_name'],0, get_option('max_display_chr')); //define('MAX_DISPLAY_CHR', get_option('max_display_chr')); if (get_option('cat_font_size')=='true') { $font_size = 'font-size:'.rand(get_option('min_font_size'),get_option('max_font_size')).'px'; } $box_content[] = array ( 'SIZE' => $font_size, 'LINK' => os_href_link(FILENAME_DEFAULT, $cat_link), 'TITLE' => $cat['categories_heading_title'], 'NAME' => $cat_name, 'PRODUCTS' => $cat['c'], 'SEP' => $sep ); $box->assign('box_content', $box_content); $box->assign('cat_title', $cat_title); } В шаблоне потом использовать {$box_content.PRODUCTS} Поправил вывод вот так , 'NAME' => $cat_name, 'SEP' => $sep ); } $box->assign('box_content', $box_content); $box->assign('cat_title', $cat_title); $box->template_dir = plugdir(); Поясняю: 1. Ни к чему каждый раз в цикле исполнять функцию get_option(), да к тому же делать запрос, если ответ всегда одинаковый, пока админ не изменил значение; 2. mt_rand() работает быстрее, меньше повторяемости; 3. При обрезании добавляется отточие. Что-то перестали названия в случайном порядке появляться. Спасибо за помощь grig и tulgha. как всегда выручили! $max_display_chr = get_option('max_display_chr'); $cat_font_size = false; if ( strtolower(get_option('cat_font_size')) =='true') { ........ $cat_font_size = true; } И этот $cat_name_tmp = $cat['categories_name']; if ( strlen($cat_name_tmp) > $max_display_chr ) { Точнее, что, где происходит? Я даже не знаю как объяснить очевидное, тем более, что в пояснении описал цели. Хм. Теперь понятно. Спасибо! Гадский кэш! Всё равно пишется в кэш и читается из кэша. А где функция cat_cloud_remove() ?? А че там удалять после выключения? Сделать мин. и макс. размер не более 10 и повесить на CSS. Соотношение минимального к максимальному размеру должно быть не более 1:3, или лучше 1:2. Если брать минимальный читаемый размер на распространенных размерах экрана, это кегли 8-24 или 8-16. 8-16 градаций уже хватает, если принять десятичный принцип - каждые 10% соотношения количества товаров в категориях - 0.1 пики, то это кегли 8-18 или 9-19, если добавить разборчивости самого мелкого шрифта. Видимо придётся вывод делать не через шаблон со смарти и кэшем, а напрямую в HTML из php файла. $query = osDBquery($query); заменить на $query = os_db_query($query); и будет случайнабор категории без включения кэша. Опа. Спасибо. Обновил Если сравнить функции, первая всегда обращается к кэшу. Да. Надо будет запомнить, чтобы еще таких косяков не наделать! Хотелось бы иметь опцию Случайно отдельно от опции Сортировка. И то, и другое включать раздельно. NeBox а архив обновлен в первом посту? Только исправление с кэшем, которое подсказал tulgha. |
|