OSDN Git Service

Plugin: add Sidebar.pm
authorhylom <hylom@users.sourceforge.jp>
Tue, 22 Nov 2016 11:00:51 +0000 (20:00 +0900)
committerhylom <hylom@users.sourceforge.jp>
Tue, 22 Nov 2016 11:00:51 +0000 (20:00 +0900)
src/newslash_web/lib/Newslash/Plugin/Sidebar.pm [new file with mode: 0644]
src/newslash_web/lib/Newslash/Web.pm
src/newslash_web/lib/Newslash/Web/Controller/Index.pm

diff --git a/src/newslash_web/lib/Newslash/Plugin/Sidebar.pm b/src/newslash_web/lib/Newslash/Plugin/Sidebar.pm
new file mode 100644 (file)
index 0000000..eca7b3c
--- /dev/null
@@ -0,0 +1,45 @@
+package Newslash::Plugin::Sidebar;
+
+use Mojo::Base 'Mojolicious::Plugin';
+use Mojo::Util 'dumper';
+use Mojo::JSON qw(decode_json encode_json);
+
+use Template;
+
+sub register {
+  my ($self, $app, $conf) = @_;
+
+  $app->hook(before_render => sub {
+                 my ($c, $args) = @_;
+                 if ($args->{sidebar}) {
+                     my $boxes = $c->model('boxes');
+                     my $users = $c->model('users');
+
+                     my $user = $c->stash("user");
+                     my $user_boxes = $users->sidebar_items(uid => $user->{uid});
+
+                     my $items = [];
+                     my $tt = Template->new();
+
+                     for my $box (@$user_boxes) {
+                         if (!$box->{query_params}) {
+                             push @$items, $box->{template};
+                             next;
+                         }
+                         my $q_params = decode_json($box->{query_params});
+                         $q_params->{limit} = $box->{limit};
+                         my $model = $c->model($box->{model});
+                         next if !$model;
+                         my $rs = $model->select(%$q_params);
+                         my $result = '';
+                         my $template = $box->{template};
+                         if ($tt->process(\$template, {items => $rs}, \$result)) {
+                             push @$items, $result;
+                         }
+                     }
+                     $c->stash("boxes" => $items);
+                 }
+             });
+}
+
+1;
index 4134cab..b2b3533 100644 (file)
@@ -44,6 +44,9 @@ sub startup {
     # user authorization
     $app->plugin('Newslash::Plugin::UserAuth');
 
+    # sidebar
+    $app->plugin('Newslash::Plugin::Sidebar');
+
     # Router
     my $r = $app->routes;
 
index 349680c..1b19b33 100644 (file)
@@ -7,33 +7,7 @@ use Template;
 sub root {
     my $c = shift;
     my $stories = $c->model('stories')->latest;
-    my $boxes = $c->model('boxes');
-
-    my $user = $c->stash("user");
-    my $users = $c->model('users');
-    my $items = $users->sidebar_items(uid => $user->{uid});
-
-    my $sidebar_items = [];
-    my $tt = Template->new();
-
-    for my $box (@$items) {
-        if (!$box->{query_params}) {
-            push @$sidebar_items, $box->{template};
-            next;
-        }
-        my $q_params = decode_json($box->{query_params});
-        my $model = $c->model($box->{model});
-        next if !$model;
-        my $rs = $model->select(%$q_params);
-        my $result = '';
-        my $template = $box->{template};
-        if ($tt->process(\$template, {items => $rs}, \$result)) {
-            push @$sidebar_items, $result;
-        }
-    }
-    $c->app->log->debug(dumper($sidebar_items));
-    #$c->app->log->debug(dumper($stories));
-    $c->render(stories => $stories, boxes => $sidebar_items);
+    $c->render(stories => $stories, sidebar => 1);
 }
 
 sub journals {