Skip to content

Commit

Permalink
Fixed menu category permalinks and reverse routing
Browse files Browse the repository at this point in the history
  • Loading branch information
sampoyigi committed Jun 18, 2016
1 parent 5f4fdaa commit 9c8f2b0
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 91 deletions.
1 change: 0 additions & 1 deletion admin/controllers/Categories.php
Expand Up @@ -142,7 +142,6 @@ public function edit() {
$data['no_image'] = $this->Image_tool_model->resize('data/no_photo.png');

$data['permalink'] = $this->permalink->getPermalink('category_id='.$category_info['category_id']);
$data['permalink']['url'] = root_url('menus').'/';

if ($this->input->post('image')) {
$data['image'] = $this->input->post('image');
Expand Down
9 changes: 3 additions & 6 deletions admin/views/themes/tastyigniter-blue/categories_edit.php
Expand Up @@ -22,12 +22,9 @@
<span class="help-block"><?php echo lang('help_permalink'); ?></span>
</label>
<div class="col-sm-5">
<div class="input-group">
<span class="input-group-addon text-sm"><?php echo $permalink['url']; ?></span>
<input type="hidden" name="permalink[permalink_id]" value="<?php echo set_value('permalink[permalink_id]', $permalink['permalink_id']); ?>"/>
<input type="text" name="permalink[slug]" id="input-slug" class="form-control" value="<?php echo set_value('permalink[slug]', $permalink['slug']); ?>"/>
</div>
<?php echo form_error('permalink[permalink_id]', '<span class="text-danger">', '</span>'); ?>
<input type="hidden" name="permalink[permalink_id]" value="<?php echo set_value('permalink[permalink_id]', $permalink['permalink_id']); ?>"/>
<input type="text" name="permalink[slug]" id="input-slug" class="form-control" value="<?php echo set_value('permalink[slug]', $permalink['slug']); ?>"/>
<?php echo form_error('permalink[permalink_id]', '<span class="text-danger">', '</span>'); ?>
<?php echo form_error('permalink[slug]', '<span class="text-danger">', '</span>'); ?>
</div>
</div>
Expand Down
11 changes: 8 additions & 3 deletions extensions/categories_module/controllers/Categories_module.php
Expand Up @@ -75,11 +75,15 @@ public function index() {
protected function categoryTree($categories, $mix_it_up, $is_child = FALSE) {
$category_id = $this->input->get('category_id');

$url = 'menus';
if ($location_id = $this->input->get('location_id')) {
$url = "local?location_id={$location_id}";
}

$tree = '<ul class="list-group list-group-responsive">';

if (!$is_child) {
$attr = $mix_it_up ? ' class="filter" data-filter="all" ' : ' class="" href="'.site_url('menus').'" ';
$tree .= '<li class="list-group-item"><a' . $attr . '><i class="fa fa-angle-right"></i>&nbsp;&nbsp;'.$this->lang->line('text_show_all').'</a>';
$tree .= '<li class="list-group-item"><a class="" href="'.site_url($url).'"><i class="fa fa-angle-right"></i>&nbsp;&nbsp;'.$this->lang->line('text_show_all').'</a>';
}

if ( ! empty($categories)) {
Expand All @@ -89,7 +93,8 @@ protected function categoryTree($categories, $mix_it_up, $is_child = FALSE) {
if ($mix_it_up) {
$attr = ' class="filter" data-filter="'.$selector.'" ';
} else {
$attr = ($category['category_id'] === $category_id) ? ' class="" href="#'.$selector.'" ' : ' class="active" href="#'.$selector.'" ';
$attr = ($category['category_id'] === $category_id) ? ' class="" ' : ' class="active" ';
$attr .= 'href="' . site_url($url . (($location_id) ? '&' : '?') . 'category_id=' . $category['category_id']) . '" ';
}

if (!empty($category['children'])) {
Expand Down
2 changes: 2 additions & 0 deletions main/controllers/Menus.php
Expand Up @@ -84,6 +84,8 @@ public function getList($filter, $list_data = array()) {

$list_data['categories'] = array();
foreach (sort_array($categories) as $category) {
if (!empty($filter['filter_category']) AND $filter['filter_category'] != $category['category_id']) continue;

$category_image = '';
if ( ! empty($category['image'])) {
$category_image = $this->Image_tool_model->resize($category['image'], '800', '115');
Expand Down
3 changes: 1 addition & 2 deletions system/tastyigniter/core/TI_Router.php
Expand Up @@ -166,8 +166,7 @@ public function _reverse_routing($uri = '')
$this->CI->load->library('permalink');

if ($slug = $this->CI->permalink->getQuerySlug($query[1], $uri)) {
$uri = ($uri === 'pages') ? str_replace('pages', '', $uri) : $uri.'/';
return $uri.$slug;
return $slug;
}
}

Expand Down
179 changes: 100 additions & 79 deletions system/tastyigniter/libraries/Permalink.php
Expand Up @@ -22,109 +22,130 @@
* @link http://docs.tastyigniter.com
*/
class Permalink {
var $permalinks = array();
var $slugs = array();
var $permalinks = array();
var $slugs = array();

public function __construct() {
$this->CI =& get_instance();
$this->CI->load->model('Permalink_model');
public function __construct() {
$this->CI =& get_instance();
$this->CI->load->model('Permalink_model');

$this->getPermalinks();
$this->getPermalinks();

if ($this->CI->config->item('permalink') == '1') {
$this->slugs = $this->getSlugs();
$this->_setRequestQuery();
}
}
if ($this->CI->config->item('permalink') == '1') {
$this->slugs = $this->getSlugs();
$this->_setRequestQuery();
}
}

public function getPermalinks() {
if (empty($this->permalinks)) {
$this->permalinks = $this->CI->Permalink_model->getPermalinks();
}
public function getPermalinks() {
if (empty($this->permalinks)) {
$this->permalinks = $this->CI->Permalink_model->getPermalinks();
}

return $this->permalinks;
}
return $this->permalinks;
}

public function getPermalink($query) {
$result = array('permalink_id' => 0, 'slug' => '', 'controller' => '', 'url' => '', 'query' => $query);
public function getPermalink($query) {
$result = array('permalink_id' => 0, 'slug' => '', 'controller' => '', 'url' => '', 'query' => $query);

if (!empty($query) AND !empty($this->permalinks)) {
foreach ($this->permalinks as $permalink) {
if ($query === $permalink['query']) {
$result = $permalink;
}
}
}
if (!empty($query) AND !empty($this->permalinks)) {
foreach ($this->permalinks as $permalink) {
if ($query === $permalink['query']) {
$result = $permalink;
}
}
}

return $result;
}
return $result;
}

public function getSlugs() {
$result = array();
public function getSlugs() {
$result = array();

if (!empty($this->permalinks)) {
foreach ($this->permalinks as $permalink) {
if (isset($permalink['slug']) AND isset($permalink['query'])) {
$result[$permalink['controller']][$permalink['slug']] = $permalink['query'];
}
}
}
if (!empty($this->permalinks)) {
foreach ($this->permalinks as $permalink) {
if (isset($permalink['slug']) AND isset($permalink['query'])) {
$result[$permalink['controller']][$permalink['slug']] = $permalink['query'];
}
}
}

return $result;
}
return $result;
}


public function getQuerySlug($query = '', $controller = 'pages') {
$query_arr = array();

public function getQuerySlug($query = '', $controller = 'pages') {
$controller = strtolower($controller);
if (!isset($this->slugs[$controller])) return NULL;

$slugs = array_flip($this->slugs[$controller]);

parse_str($query, $query_arr);
$slugs = $this->slugs;
$controller_slugs = $slugs[$controller];

foreach ($query_arr as $key => $val) {
if (isset($slugs[$key.'='.$val])) {
$slug = $slugs[$key.'='.$val];
unset($slugs[$controller]);
array_unshift($slugs, $controller_slugs);

unset($query_arr[$key]);
return ! empty($query_arr) ? $slug . '?' . http_build_query($query_arr) : $slug;
}
}
}
return $this->parseQueryString($slugs, $query, $controller);
}

public function savePermalink($controller, $permalink = array(), $query = '') {
return $this->CI->Permalink_model->savePermalink($controller, $permalink, $query);
}
public function savePermalink($controller, $permalink = array(), $query = '') {
return $this->CI->Permalink_model->savePermalink($controller, $permalink, $query);
}

public function deletePermalink($controller, $query = '') {
return $this->CI->Permalink_model->deletePermalink($controller, $query);
}
public function deletePermalink($controller, $query = '') {
return $this->CI->Permalink_model->deletePermalink($controller, $query);
}

private function _setRequestQuery() {
if ($this->CI->config->item('permalink') === '1') {
protected function _setRequestQuery() {
if ($this->CI->config->item('permalink') === '1') {

$controller = strtolower($this->CI->uri->rsegment(1) ? $this->CI->uri->rsegment(1) : 'pages');

if ($this->CI->uri->segment(2)) {
$slug = $this->CI->uri->segment(2);
} else if ($this->CI->uri->segment(1)) {
$slug = $this->CI->uri->segment(1);
} else {
$slug = '';
}

if (isset($this->slugs[$controller][$slug])) {
$query = $this->slugs[$controller][$slug];
$query = explode('=', $query);

if (isset($query[1])) {
$_GET[$query[0]] = $query[1];
}
}
}
}
$previous_segment = NULL;
foreach ($this->CI->uri->segment_array() as $segment) {
$previous_segment = !isset($previous_segment) ? $controller : $previous_segment;
if (isset($this->slugs[$previous_segment][$segment])) {

list($get_key, $get_value) = explode('=', $this->slugs[$previous_segment][$segment]);
if (!empty($get_key) AND !empty($get_value)) {
$_GET[$get_key] = $get_value;
}
}

$previous_segment = $segment;
}
}
}

protected function parseQueryString($slugs, $query, $controller) {
$querySlug = $query_arr = array();

parse_str($query, $query_arr);
foreach ($slugs as $context => $_slugs) {
$context = is_numeric($context) ? $controller : $context;
$_slugs = array_flip($_slugs);

foreach ($query_arr as $key => $val) {
$keys = array_keys($_slugs);

if (preg_grep("/^" . $key . "/", $keys)) {

$slug = $context;
if (isset($_slugs[$key . '=' . $val])) {
$context = ($context === 'pages') ? '' : $context . '/';
$slug = $context . $_slugs[$key . '=' . $val];
unset($query_arr[$key]);
}

$querySlug[] = $slug;
continue;
}
}
}

$querySlug = !empty($querySlug) ? implode('/', $querySlug) : '';

return !empty($query_arr) ? $querySlug . '?' . http_build_query($query_arr) : $querySlug;
}
}

// END Permalink class
Expand Down

0 comments on commit 9c8f2b0

Please sign in to comment.