Виджет 3Д облако тегов на instantcms 2.0.1
Виджет делаю 3d облако тегов на базе JS скрипта TagCanvas, за основу взял существующий облако, вообщем все получилось, но вот пару моментов хотел спросить может кто в курсе или подскажет как по грамотней реализовать:
Сейчас подключил файлы js и css в head шаблона main.tpl.php, а можно ли как то их подключить через шаблон виджета в папочке controllers? Чтоб страницу не грузить лишний раз js скриптами, по проверке если виджет включен то выводим в head :
<script type="text/javascript">
$(document).ready(function() {
if(!$('#myCanvas').tagcanvas({
textColour: '#ff0000',
outlineColour: '#ff00ff',
reverse: true,
depth: 0.8,
maxSpeed: 0.05
},'tags')) {
// something went wrong, hide the canvas container
$('#myCanvasContainer').hide();
}
});
</script>
Ну и хотел еще плюшки сделать в опциях менять через ПУ параметры textColour, depth, maxSpeed, не понял как вывести если выбрана вкладка 3D облако тегов добавить вкладку настройки 3Д облака.
Да можете от шаблон виджета подключить таким образом:Сейчас подключил файлы js и css в head шаблона main.tpl.php, а можно ли как то их подключить через шаблон виджета в папочке controllers?
<?php $this->addMainJS("templates/{$this->name}/папка/файл.js"); ?> <?php $this->addMainCSS("templates/{$this->name}/папка/файл.css"); ?>
Опции для виджета можете сделать сколько угодно, просто создайте options.form.php
<script type="text/javascript"> $(document).ready(function() { if(!$('#myCanvas').tagcanvas({ textColour: <?php echo $textColor; ?>, outlineColour: <?php echo $outlineColour; ?>, reverse: <?php echo $reverse; ?>, depth: 0.8, maxSpeed: 0.05 },'tags')) { // something went wrong, hide the canvas container $('#myCanvasContainer').hide(); } }); </script>
Собственно чтоб повторить мои шаги выкладываю порядок действий что я сделал:
Напомню что ничего глобального нет модифицировал существующее решение.
1. Качаем скрипт TagCanvas, закидываем его в папочку /templates/ваш_шаблон/js/
я брал версию jquery.tagcanvas.min.js
2. Прописываем в языковых файлах наше 3-д облако /languages/ru/controllers/tags/widgets/cloud.php
$style = $this->getOption('style', 'cloud', 'clouds3d');
if ($style=='cloud' || 'clouds3d'){ $max_frequency = $model->getMaxTagFrequency(); }
<?php if ($tags){ ?> <div class="widget_tags_cloud"> <?php if ($style=='clouds3d') { ?> <script type="text/javascript"> $(document).ready(function() { if(!$('#tagCanvas').tagcanvas({ shape: "hring", lock: "x", textColour: null, outlineColour: '#fac21f', reverse: true, weight: false, depth: 0.5, maxSpeed: 0.05 },'tags')) { // something went wrong, hide the canvas container $('#tagCanvasContainer').hide(); } }); </script> <div id="tagCanvasContainer"> <canvas id="tagCanvas"> <p>Ваш браузер не поддерживает 3Д</p> </canvas> </div> <div id="tags"> <ul> <?php foreach($tags as $tag) { ?> <?php $fs = $min_fs + $step; ?> <li style="font-size: <?php echo $fs; ?>px"> <?php echo html_tags_bar($tag['tag']); ?> </li> <?php } ?> </ul> <?php } else {?> <ul class="tags_as_<?php echo $style; ?>"> <?php foreach($tags as $tag) { ?> <?php if ($style=='cloud'){ ?> <?php $fs = $min_fs + $step; ?> <li style="font-size: <?php echo $fs; ?>px"> <?php echo html_tags_bar($tag['tag']); ?> </li> <?php } ?> <?php if ($style=='list'){ ?> <li> <?php echo html_tags_bar($tag['tag']); ?> <span class="counter"><?php html($tag['frequency']); ?></span> </li> <?php } ?> <?php } ?> </ul> <?php } ?> <?php if ($style=='clouds3d'){ ?> </div> <?php } ?> </div> <?php } ?>
<?php $this->addMainJS("templates/{$this->name}/js/jquery.tagcanvas.min.js"); ?>
В планах сделать опции настроек облака его можно выводить как горизонтальное кольцо, вертикально, цилиндр (вращение по оси х или у), ну и сфера, задавать бэкграунд, цвет текста, цвет обводки, вид обводки, скорость вращения, ну вообщем много всего там.
Так же появилась идея применить этот же механизм для вывода аватаров пользователей кольцом по горизонтали с применением виджета в теле страницы, думаю будет красиво.