126

Re: Вопросы по написанию плагинов

Вопрос по MVC. Есть плагин, который выводит некое содержимое.
присутствует папка view с шаблонами вывода для админки и для фронта. Одна проблема: на сайте создается страница с названием плагина например site.ru/myplugin и естественно в карте сайта появляется эта страница. но она мне не нужна, как сделать так, чтобы при установке плагина не появлялось этой страницы. Своими мозгами додумать не получилось...

Поделиться

127

Re: Вопросы по написанию плагинов

news.plugin.php

// Register plugin
Plugin::register( __FILE__,
    __('News', 'news'),
    __('News plugin for Monstra', 'news'),
    '1.6.1',
    'KANekT',
    'http://monstra.org/',
    'news');

удаляем последнею строчку 'news' и он не появляется

Site | GitHub | Создание форумов/решений на базе PunBB/Monstra/OGMA

Плагины распространяются по Creative Commons Attribution-NonCommercial 3.0

Сайт KANekT

Поделиться

128

Re: Вопросы по написанию плагинов

либо, если у плагина должна быть страница, но она не должна присутствовать в карте сайта, нужно в box/sitemap.plugin.php дополнит массив исключений.

Страдание фигнёй на рабочем месте развивает боковое зрение, слух, скорость реакции и бдительность в целом.
Пишу плагины под заказ, конвертирую шаблоны под Монстра - пишите на email через ссылку в профиле.

Поделиться

129

Re: Вопросы по написанию плагинов

Спасибо!!!! Разобрался)))))))

Поделиться

130

Re: Вопросы по написанию плагинов

еще такой вопрос: внутри кода плагина лучше пользоваться

или

?
Есть ли разница?

Поделиться

131

Re: Вопросы по написанию плагинов

еще такой вопрос: внутри кода плагина лучше пользоваться

или

?
Есть ли разница?

Поделиться

132

Re: Вопросы по написанию плагинов

Опыт показывает что лучше писать Option::get('siteurl');

Ex ungue leonem

Поделиться

133

Re: Вопросы по написанию плагинов

а как выбрать несколько записей из таблицы ?

одну:

$product->select('[id=1]');

а несколько как ? так не работает:

$product->select('[id=1,2,3]');
Site | GitHub | Создание форумов/решений на базе PunBB/Monstra/OGMA

Плагины распространяются по Creative Commons Attribution-NonCommercial 3.0

Сайт KANekT

Поделиться

134

Re: Вопросы по написанию плагинов

Документацию уже отменили?
http://monstra.org/documentation/xmldb-api

Поделиться

135

Re: Вопросы по написанию плагинов

Малевич пишет:

Документацию уже отменили?
http://monstra.org/documentation/xmldb-api

Ты кто такой ? Давай в лес иди. Нету в документации того, что я ищу.

Site | GitHub | Создание форумов/решений на базе PunBB/Monstra/OGMA

Плагины распространяются по Creative Commons Attribution-NonCommercial 3.0

Сайт KANekT

Поделиться

136

Re: Вопросы по написанию плагинов

Ты такой дерзкий, я просто скопировал ТВОЕ сообщение из другого аналогичного вопроса. И ответ там есть.

Поделиться

137

Re: Вопросы по написанию плагинов

Хорошо. Есть так так есть.

Site | GitHub | Создание форумов/решений на базе PunBB/Monstra/OGMA

Плагины распространяются по Creative Commons Attribution-NonCommercial 3.0

Сайт KANekT

Поделиться

138

Re: Вопросы по написанию плагинов

как правильно сделать ресайз ? нужно вписать мини картинку в заданный размер. Если пропорции не совпадают, то заполняем белым.

пока сделал так

 
       $im = imageCreatetrueColor($width, $height) or die ("Ошибка при создании изображения");
        $red = imagecolorallocate($im, 255, 255, 255);
        imagefill($im, 0, 0, $red);
        $image = imagecreatefromjpeg($folder.'thumbnail'.DS.$name);
        imageCopyResampled($im, $image, 0, 0, 0, 0, $img->width, $img->height, $img->width, $img->height);
        imagejpeg($im, $folder.'thumbnail'.DS.$name, 100);

есть ли в Gelato Library Image уже встроенный такой функционал ?

Site | GitHub | Создание форумов/решений на базе PunBB/Monstra/OGMA

Плагины распространяются по Creative Commons Attribution-NonCommercial 3.0

Сайт KANekT

Поделиться

139

Re: Вопросы по написанию плагинов

Есть ли возможность использовать View без темы ?

То есть, чтобы произошел render только того кода, что в view ?

Или из коробки такое не делается ?

    public function __construct($view, array $variables = array())
    {
        // Set view file
        // From current theme folder or from plugin folder
        if (File::exists($theme_view_file = THEMES_SITE . DS . Site::theme() . DS . $view . '.view.php') && BACKEND == false) {
            $this->view_file = $theme_view_file;
        } else {
            $this->view_file = PLUGINS . DS . $view . '.view.php';
        }
        // Is view file exists ?
        if (file_exists($this->view_file) === false) {
            throw new RuntimeException(vsprintf("%s(): The '%s' view does not exist.", array(__METHOD__, $view)));
        }
        // Set view variables
        $this->vars = $variables;
    }

тут не вижу такой возможности.

Site | GitHub | Создание форумов/решений на базе PunBB/Monstra/OGMA

Плагины распространяются по Creative Commons Attribution-NonCommercial 3.0

Сайт KANekT

Поделиться

140

Re: Вопросы по написанию плагинов

Нужно использовать хук pre_render - он висит в index.php

Страдание фигнёй на рабочем месте развивает боковое зрение, слух, скорость реакции и бдительность в целом.
Пишу плагины под заказ, конвертирую шаблоны под Монстра - пишите на email через ссылку в профиле.

Поделиться

141

Re: Вопросы по написанию плагинов

я использую его в Action::add('admin_pre_render','CalculationAdmin::_requestAjax');

    /**
     * _requestAjax
     */
    public static function _requestAjax()
    {
        if (Security::check(Request::get('csrf')) && Request::get('action') == 'add') {
            if (Request::get('doors') == true) {
                $view = new View('news/views/backend/doors.add');
                echo $view;
                die();
            }
        }
        //exit('no action');
    }

View возвращается полная.

Site | GitHub | Создание форумов/решений на базе PunBB/Monstra/OGMA

Плагины распространяются по Creative Commons Attribution-NonCommercial 3.0

Сайт KANekT

Поделиться

142

Re: Вопросы по написанию плагинов

Как доберусь до домашнего компа, выложу свой кусок кода с рабочего сайта.

Страдание фигнёй на рабочем месте развивает боковое зрение, слух, скорость реакции и бдительность в целом.
Пишу плагины под заказ, конвертирую шаблоны под Монстра - пишите на email через ссылку в профиле.

Поделиться

143

Re: Вопросы по написанию плагинов

total = count($data);
            $data = array_slice($data, $this->getOffset(), $this->limit);
            return $data;
        }
    }
class Tops extends Frontend { 
    public static $users = null;
  public static $out = '';
  public static $titles = '';
    public static function _shorcode($attributes) {
        extract($attributes);
        $count = (isset($count)) ? (int)$count : 5;
        Action::run('dblink');
        $db = goDB::getDB("SIDB");
        if (isset($list)) {
            switch ($list) {
                case 'last_added_authors':
                    return Tops::getLastAddedAuthors($db, $count);
                case 'last_updates':
                    return Tops::getLastUpdates($db, $count);
                case 'top_rating_authors':
                    return Tops::getTopRatingAuthors($db, $count);
                case 'top_readed_authors':
                    return Tops::getTopReadedAuthors($db, $count);
                case 'top_users_lists':
                    return Tops::getLastRegisteredUsers($count);
                case 'check_si_servers':
                    return Tops::getSiStatus();
            }
        }
    }
    /**
  * Get Top Readed Authors
  */
  public static function getTopReadedAuthors($db, $count) {
        $cache = Mcache::getInstance(); 
        $cache_id = 'getTopReadedAuthors';
        $sortedby=' ORDER BY `watchers` DESC LIMIT ?i';
        $query = "SELECT COUNT(`aname`) `watchers`, l.id `id`, l.aname `aname`, l.url `url`, l.text `textlist`, l.rating `rating` FROM `links` l LEFT JOIN `users2links` u2l on (l.id = u2l.linkid) WHERE l.type = 2 GROUP BY `aname` ".$sortedby;
        $data = array($count);
        if ($cache->exists($cache_id)) {
            $authorlist = $cache->get($cache_id);
        } else {
            $authorlist = $db->query($query, $data, 'assoc');
            $cache->set($cache_id, $authorlist, 60 * 60 * 1);
        }
        View::factory('tops/views/frontend/getTopReadedAuthors')
      ->assign('authorlist', $authorlist)
      ->display();
    }
    /**
  * Get Top Rating Authors
  */
  public static function getTopRatingAuthors($db, $count) {
        $cache = Mcache::getInstance(); 
        $cache_id = 'getTopRatingAuthors';
        $sortedby=' ORDER BY `rating` DESC LIMIT ?i';
        $query = "SELECT COUNT(*) `watchers`, l.id `id`, l.aname `aname`, l.url `url`, l.text `textlist`, l.rating `rating` FROM `links` l RIGHT JOIN `users2links` u2l on (l.id = u2l.linkid) WHERE l.type = 2 GROUP BY l.aname ".$sortedby;
        $data = array($count);
        if ($cache->exists($cache_id)) {
            $authorlist = $cache->get($cache_id);
        } else {
            $authorlist = $db->query($query, $data, 'assoc');
            $cache->set($cache_id, $authorlist, 60 * 60 * 1);
        }
        View::factory('tops/views/frontend/getTopRatingAuthors')
      ->assign('authorlist', $authorlist)
      ->display();
    }
    /**
  * Get Last Updates
  */
  public static function getLastUpdates($db, $count) {
        $cache = Mcache::getInstance(); 
        $cache_id = 'getLastUpdates';
        $sortedby='ORDER BY `updated` DESC LIMIT ?i';
        $query = "SELECT * FROM `links` l WHERE l.type = 1 ".$sortedby;
        $data = array($count);
        if ($cache->exists($cache_id)) {
            $authorlist = $cache->get($cache_id);
        } else {
            $authorlist = $db->query($query, $data, 'assoc');
            $cache->set($cache_id, $authorlist, 60 * 60 * 1);
        }
        View::factory('tops/views/frontend/getLastUpdates')
      ->assign('authorlist', $authorlist)
      ->display();
    }
    /**
  * Get Last Added Authors
  */
  public static function getLastAddedAuthors($db, $count) {
        $cache = Mcache::getInstance(); 
        $cache_id = 'getLastAddedAuthors';
        $sortedby=' ORDER BY `id` DESC LIMIT ?i';
        $query = "SELECT l.id `id`, l.aname `aname`, l.url `url`, l.rating `rating`, l.updated `updated` FROM `links` l WHERE l.type = 2 GROUP BY l.aname ".$sortedby;
        $data = array($count);
        if ($cache->exists($cache_id)) {
            $authorlist = $cache->get($cache_id);
        } else {
            $authorlist = $db->query($query, $data, 'assoc');
            $cache->set($cache_id, $authorlist, 60 * 60 * 1);
        }
        View::factory('tops/views/frontend/getLastAddedAuthors')
      ->assign('authorlist', $authorlist)
      ->display();
    }
  /**
  * Функция возвращает окончание для множественного числа слова на основании числа и массива окончаний
  * @param  $number Integer Число на основе которого нужно сформировать окончание
  * @param  $endingsArray  Array Массив слов или окончаний для чисел (1, 4, 5),
  *         например array('яблоко', 'яблока', 'яблок')
  * @return String
  */
  public static function getNumEnding($number, $endingArray) {
        $number = $number % 100;
    if ($number>=11 && $number<=19) {
      $ending=$endingArray[2];
    } else {
            $i = $number % 10;
      switch ($i) {
                case (1): $ending = $endingArray[0]; break;
        case (2):
        case (3):
        case (4): $ending = $endingArray[1]; break;
        default: $ending=$endingArray[2];
      }
    }
    return $ending;
  }
    /**
  * Get Tops list
  */
  public static function getList() {
        $authorlist = '';
        Action::run('dblink');
        $db = goDB::getDB("SIDB");
        $errors = array();
        $users = new Table('siwusers');
        $cache = Mcache::getInstance(); 
        $pageNum = (isset($_GET['p']) && $_GET['p'] != '') ? (int)$_GET['p'] : 1;
        $sortedby = ' ORDER BY l.aname ASC';
        $s_query = "SELECT COUNT(u2l.id) `watchers`, l.id `id`, l.aname `aname`, l.url `url`, l.text `textlist`, l.rating `rating` FROM `links` l RIGHT JOIN `users2links` u2l on (l.id = u2l.linkid) WHERE l.type = 2 GROUP BY l.aname ".$sortedby;
        //$author_list = $db->query($s_query, null, 'assoc');
        //Debug::dump($author_list);exit;
        if (Uri::segment(1)=='sorted-by' && Uri::segment(2)=='rating') {
            $sortedby=' ORDER BY `rating` DESC';
            $s_query = "SELECT COUNT(*) `watchers`, l.id `id`, l.aname `aname`, l.url `url`, l.text `textlist`, l.rating `rating` FROM `links` l RIGHT JOIN `users2links` u2l on (l.id = u2l.linkid) WHERE l.type = 2 GROUP BY l.aname ".$sortedby;
            if ($cache->exists("tops_list_r")) {
            $author_list = $cache->get("tops_list_r");
            } else {
            $author_list = $db->query($s_query, null, 'assoc');
            $cache->set("tops_list_r", $author_list, 60 * 60 * 1);
            }
        } else if (Uri::segment(1)=='sorted-by' && Uri::segment(2)=='watchers') {
            $sortedby=' ORDER BY `watchers` DESC';
            $s_query = "SELECT COUNT(`aname`) `watchers`, l.id `id`, l.aname `aname`, l.url `url`, l.text `textlist`, l.rating `rating` FROM `links` l LEFT JOIN `users2links` u2l on (l.id = u2l.linkid) WHERE l.type = 2 GROUP BY `aname` ".$sortedby;
            if ($cache->exists("tops_list_w")) {
            $author_list = $cache->get("tops_list_w");
            } else {
            $author_list = $db->query($s_query, null, 'assoc');
            $cache->set("tops_list_w", $author_list, 60 * 60 * 1);
            }
        } else if (Uri::segment(1)=='sorted-by' && Uri::segment(2)=='adddate') {
            $sortedby=' ORDER BY `id` DESC';
            $s_query = "SELECT COUNT(*) `watchers`, l.id `id`, l.aname `aname`, l.url `url`, l.text `textlist`, l.rating `rating` FROM `links` l RIGHT JOIN `users2links` u2l on (l.id = u2l.linkid) WHERE l.type = 2 GROUP BY l.aname ".$sortedby;
            if ($cache->exists("tops_list_d")) {
            $author_list = $cache->get("tops_list_d");
            } else {
            $author_list = $db->query($s_query, null, 'assoc');
            $cache->set("tops_list_d", $author_list, 60 * 60 * 1);
            }
        } else {
            if ($cache->exists("tops_list")) {
            $author_list = $cache->get("tops_list");
            } else {
            $author_list = $db->query($s_query, null, 'assoc');
            $cache->set("tops_list", $author_list, 60 * 60 * 1);
            }
        }
        $s_query = "SELECT * FROM `users2links` u2l WHERE u2l.type = 2;";
        //$author_userlists = $db->query($s_query, null, 'assoc');
        if ($cache->exists("tops_userlists")) {
            $author_userlists = $cache->get("tops_userlists");
        } else {
            $author_userlists = $db->query($s_query, null, 'assoc');
            $cache->set("tops_userlists", $author_userlists, 60 * 60 * 1);
        }
        if (Session::exists('siwuser_id') && (Session::get('siwuser_login') != '')) { 
            //под юзером
            $user = $users->select('[login="'.Session::get('siwuser_login').'"]', null);        
            $tmp_query = "SELECT u2l.linkid FROM `users2links` u2l WHERE u2l.type = 2 AND u2l.userid = (select u.id from `users` u where u.jid='".$user['jabber']."');";
            //$author_userlist = $db->query($tmp_query, null, 'col');
            if ($cache->exists("tops_userlist_".$user['jabber'])) {
                $author_userlist = $cache->get("tops_userlist_".$user['jabber']);
            } else {
                $author_userlist = $db->query($tmp_query, null, 'col');
                $cache->set("tops_userlist_".$user['jabber'], $author_userlist, 60 * 60 * 0.15);
            }
        } else {
            // для гостей
            $author_userlist = array();
        }
        $pager = new PagerArray($pageNum, Option::get('tops_perpage'));
        $authorlist = $pager->getData($author_list);
        $pagerNav = $pager->render();
        $statsString = '
(Авторы с %d по %d из %d)
'; View::factory('tops/views/frontend/index') ->assign('author_list', $authorlist) ->assign('author_userlist', $author_userlist) ->assign('author_userlists', $author_userlists) ->assign('pagerNav', $pagerNav) ->assign('pagerTotal', $pager->renderStats($statsString)) ->display(); } /** * Get all links to Author's texts */ public static function getAuthorLinks($db, $id) { $links = array(); $s_query = "SELECT l.text FROM `links` l WHERE l.type = 2 AND l.id = ".$id." LIMIT 1;"; $links = explode(" ", $db->query($s_query, null, 'el')); return $links; } /** * Get count of all Author's texts */ public static function getAuthorTextCount($db, $nick) { $links = array(); $s_query = "SELECT COUNT(*) FROM `links` l WHERE l.type = 1 AND l.url LIKE ? ;"; $data = array($nick[0].'/'.$nick.'/%'); return $db->query($s_query, $data, 'el'); } /** * Get Author name */ public static function getAuthorNameById($db, $id) { $s_query = "SELECT l.aname FROM `links` l WHERE l.type = 2 AND l.id = ".$id." LIMIT 1;"; return $db->query($s_query, null, 'el'); } /** * Get Author name by nick */ public static function getAuthorNameByNick($db, $nick) { $s_query = "SELECT l.aname FROM `links` l WHERE l.type = '2' AND l.url = ? ;"; $data = array($nick[0].'/'.$nick); $out = $db->query($s_query, $data, 'el'); return $out; } /** * Get Author texts by nick */ public static function getAuthorTextsByNick($db, $nick) { $s_query = "SELECT * FROM `links` l WHERE l.type = '1' AND l.url LIKE ? ORDER BY l.updated DESC;"; $data = array($nick[0].'/'.$nick.'/%'); $out = $db->query($s_query, $data, 'assoc'); return $out; } /** * Get all id's to Author's texts */ public static function getAuthorTextIDs($db, $id) { $links = Tops::getAuthorLinks($db, $id); $id = array(); foreach ($links as $link) { $s_query = "SELECT l.id FROM `links` l WHERE l.type = 1 AND l.url = '".$link."' LIMIT 1;"; $res = $db->query($s_query, null, 'el'); if ($res) $id[] = $res; } return $id; } /** * Get Author page */ public static function getAuthorPage($nick) { Action::run('dblink'); $db = goDB::getDB("SIDB"); $users = new Table('siwusers'); $cache = Mcache::getInstance(); $author = Tops::getAuthorNameByNick($db, $nick); if ($author =='') Request::redirect("/tops"); $texts = Tops::getAuthorTextsByNick($db, $nick); $textcount = Tops::getAuthorTextCount($db, $nick); //число читателей у текста $s_query = "SELECT COUNT(u2l.id) `watchers`, u2l.linkid FROM `links` l RIGHT JOIN `users2links` u2l on (l.id = u2l.linkid) WHERE l.type = 1 AND l.url LIKE ? GROUP BY l.url "; $data = array($nick[0].'/'.$nick.'/%'); $readers_count = $db->query($s_query, $data, 'assoc'); if (Session::exists('siwuser_id') && (Session::get('siwuser_login') != '')) { //под юзером $user = $users->select('[login="'.Session::get('siwuser_login').'"]', null); //готовим список идов текстов автора для выборки подписанных $ids = array(); foreach ($texts as $t) $ids []= $t['id']; if (count($ids) == 0) $ids[] = 0; $tmp_query = "SELECT u2l.linkid FROM `users2links` u2l WHERE u2l.type IN (1,4) AND u2l.userid = (select u.id from `users` u where u.jid=?) AND u2l.linkid IN (?list);"; //$author_userlist = $db->query($tmp_query, null, 'col'); $data = array($user['jabber'], $ids); if ($cache->exists($nick."_userlist_".$user['jabber'])) { $author_userlist = $cache->get($nick."_userlist_".$user['jabber']); } else { $author_userlist = $db->query($tmp_query, $data, 'col'); $cache->set($nick."_userlist_".$user['jabber'], $author_userlist, 60 * 60 * 0.15); } } else { // для гостей $author_userlist = array(); } View::factory('tops/views/frontend/authorpage') ->assign('author', $author) ->assign('nick', $nick) ->assign('textcount', $textcount) ->assign('texts', $texts) ->assign('author_userlist', $author_userlist) ->assign('readers_count', $readers_count) ->display(); } /** * Get Author rss-page */ public static function getRSSAuthor($nick) { Action::run('dblink'); $db = goDB::getDB("SIDB"); $users = new Table('siwusers'); $cache = Mcache::getInstance(); include_once PLUGINS . '/tops/rss_generator.inc.php'; $author = Tops::getAuthorNameByNick($db, $nick); if ($author =='') Request::redirect("/tops"); $texts = Tops::getAuthorTextsByNick($db, $nick); $rss_channel = new rssGenerator_channel(); $rss_channel->atomLinkHref = Option::get('siteurl'); $rss_channel->title = 'SIwatcher - Список произведений автора '.$author; $rss_channel->link = Option::get('siteurl').'tops/rss/'.$nick; $rss_channel->description = 'Всего у автора отслеживается ' . count($texts) . Tops::getNumEnding(count($texts), array(' текст',' текста',' текстов')); $rss_channel->language = 'ru'; $rss_channel->generator = 'SIwatcher RSS Feed Generator'; $rss_channel->managingEditor = 'admin@siwatcher.ru (El\'Drako)'; $rss_channel->webMaster = 'admin@siwatcher.ru (El\'Drako)'; //debug::dump($texts); $rss_feed = new rssGenerator_rss(); foreach ($texts as $t) { $item = new rssGenerator_item(); $a = explode('||', $t['text']); //debug::dump($t['text']);exit; $item->title = $a[1]; $s = 'Последнее сканирование: '.date("G:i:s j.m.Yг. (T)", $t['date']).'
'; $s .= strlen($a[0]) > 3 ? 'Автор: '.$a[0].'
' : ''; $s .= strlen($a[3]) > 3 ? 'Жанр: '.$a[3].'
' : ''; $s .= strlen($a[4]) > 3 ? 'Аннотация: '.$a[4].'

Размер: '.$a[2].' КБ' : '
Размер: '.$a[2].' КБ'; $s .= '

Ссылка на budclub.ru'; $item->description = $rss_feed->cData($s); $item->link = 'http://samlib.ru/'.$t['url']; $item->guid = $t['id']; $item->pubDate = date("r", $t['updated']); $rss_channel->items[] = $item; } //$rss_feed = new rssGenerator_rss(); $rss_feed->encoding = 'UTF-8'; $rss_feed->version = '2.0'; header('Content-Type: text/xml'); echo $rss_feed->createFeed($rss_channel); exit; } public static function main() { } public static function content() { } /** * Set Tops template */ public static function template() { return Option::get('tops_template'); } }
Страдание фигнёй на рабочем месте развивает боковое зрение, слух, скорость реакции и бдительность в целом.
Пишу плагины под заказ, конвертирую шаблоны под Монстра - пишите на email через ссылку в профиле.

Поделиться

144

Re: Вопросы по написанию плагинов

вывод материалов по шаблону в функциях выше.
далее его через хук frontend_pre_render.

Страдание фигнёй на рабочем месте развивает боковое зрение, слух, скорость реакции и бдительность в целом.
Пишу плагины под заказ, конвертирую шаблоны под Монстра - пишите на email через ссылку в профиле.

Поделиться