diff options
author | Bharat Mediratta <bharat@menalto.com> | 2008-11-04 05:02:37 +0000 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2008-11-04 05:02:37 +0000 |
commit | 630b0f26fc5dc970d8634e58489c41c5a40481f1 (patch) | |
tree | 93dd3699d1681afeff0a41e2c5aded74353cccd8 /core | |
parent | 8709c1965f9b13967e74efddb7ff6c99e734a135 (diff) |
Restructure the theme code to be more like WordPress / Habari. Now,
the controller initiates a request to a top level page (eg:
album.html.php) which is then free to include whatever other page
chunks it wants with calls like <?= $theme->display('header.html') ?>
Variables like $item and $children are in the global space for all
views.
theme.php helper is now Theme.php library which lets us store the name
of the theme inside the variable itself. This means that the theme
does not have to know its own name because you can use $theme->url()
for all urls to stuff inside the theme itself, which makes it possible
to cline a theme without changing a single line.
Still using the mock album UI.
Diffstat (limited to 'core')
-rw-r--r-- | core/controllers/album.php | 20 | ||||
-rw-r--r-- | core/helpers/core_installer.php | 2 | ||||
-rw-r--r-- | core/libraries/Theme.php (renamed from core/helpers/theme.php) | 21 | ||||
-rw-r--r-- | core/models/item.php | 18 | ||||
-rw-r--r-- | core/tests/Theme_Test.php | 20 |
5 files changed, 48 insertions, 33 deletions
diff --git a/core/controllers/album.php b/core/controllers/album.php index a22e5eeb..b1c7d205 100644 --- a/core/controllers/album.php +++ b/core/controllers/album.php @@ -18,28 +18,16 @@ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ class Album_Controller extends Template_Controller { - public $template = "page.html"; + public $template = "album.html"; public function View($id) { $item = ORM::factory("item")->where("id", $id)->find(); if (empty($item->id)) { return Kohana::show_404(); } - $this->template->item = $item; - - $this->template->header = new View("page_header.html"); - $this->template->header->item = $item; - - $this->template->footer = new View("page_footer.html"); - $this->template->footer->item = $item; - - $this->template->content = new View("album.html"); - $this->template->content->item = $item; - $this->template->content->maxRows = 3; - $this->template->content->maxColumns = 3; - - $this->template->sidebar = new View("page_sidebar.html"); - $this->template->sidebar->item = $item; + $this->template->set_global('item', $item); + $this->template->set_global('children', $item->get_children()); + $this->template->set_global('theme', new Theme("default", $this->template)); } } diff --git a/core/helpers/core_installer.php b/core/helpers/core_installer.php index 9dd5224c..ea01a0c0 100644 --- a/core/helpers/core_installer.php +++ b/core/helpers/core_installer.php @@ -43,6 +43,7 @@ class core_installer { `id` int(9) NOT NULL auto_increment, `type` char(32) default NULL, `title` char(255) default NULL, + `description` char(255) default NULL, `path` char(255) default NULL, `left` int(9) default NULL, `right` int(9) default NULL, @@ -64,6 +65,7 @@ class core_installer { $root = ORM::factory("item"); $root->title = "Gallery"; + $root->description = "Welcome to your Gallery3"; $root->make_root(); } } diff --git a/core/helpers/theme.php b/core/libraries/Theme.php index 5aa568c7..924e978c 100644 --- a/core/helpers/theme.php +++ b/core/libraries/Theme.php @@ -18,16 +18,17 @@ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ class theme_Core { - public static $debug_backtrace = "debug_backtrace"; + private $theme_name = null; - public static function url($path) { - // Using debug_backtrace() sucks. But I don't know of another way to get - // the location of the caller without forcing them to pass it in as an argument, which - // makes for a crappy API. - $backtrace = call_user_func(theme::$debug_backtrace); - $calling_file = $backtrace[1]['file']; - $theme_name = substr($calling_file, strlen(THEMEPATH)); - $theme_name = substr($theme_name, 0, strcspn($theme_name, "/")); - return url::base() . "themes/{$theme_name}/$path"; + public function __construct($theme_name) { + $this->theme_name = $theme_name; + } + + public function url($path) { + return url::base() . "themes/{$this->theme_name}/$path"; + } + + public function display($page_name, $view_class="View") { + return new $view_class($page_name); } } diff --git a/core/models/item.php b/core/models/item.php index b8957911..8b08b699 100644 --- a/core/models/item.php +++ b/core/models/item.php @@ -20,4 +20,22 @@ class Item_Model extends MPTT { protected $left_column = "left"; protected $right_column = "right"; + + public function is_album() { + return $this->type == 'album'; + } + + public function is_photo() { + return $this->type == 'photo'; + } + + // MPTT::get_children returns null if there are no children; change that to an empty array for + // consistency. + public function get_children() { + $children = parent::get_children(); + if (empty($children)) { + $children = array(); + } + return $children; + } } diff --git a/core/tests/Theme_Test.php b/core/tests/Theme_Test.php index 5b568b19..f73a98eb 100644 --- a/core/tests/Theme_Test.php +++ b/core/tests/Theme_Test.php @@ -19,16 +19,22 @@ */ class Theme_Test extends Unit_Test_Case { - public function teardown() { - theme::$debug_backtrace = "debug_backtrace"; + public function url_test() { + $theme = new Theme("fake_theme"); + $this->assert_equal("http://./themes/fake_theme/file", $theme->url("file")); } - public function url_test() { - theme::$debug_backtrace = array("Theme_Test", "_fake_debug_backtrace"); - $this->assert_equal("http://./themes/fake_theme/file", theme::url("file")); + public function display_test() { + $theme = new Theme("fake_theme"); + $view = $theme->display("test_page", "Theme_Test_Mock_View"); + $this->assert_equal("test_page", $view->page_name); } +} + +class Theme_Test_Mock_View { + public $page_name = null; - public function _fake_debug_backtrace() { - return array(array(), array('file' => THEMEPATH . "fake_theme/views/some_file.html.php")); + public function __construct($page_name) { + $this->page_name = $page_name; } }
\ No newline at end of file |