1

Тема: Мои исправления и доработка ImageCMS

Здравствуйте я в этой теме буду выкладывать проблемы и их решения, улучшения стандартных модулей.

Thumbs up Thumbs down

2 Отредактировано Vadim (03-04-2015 14:22:30)

Re: Мои исправления и доработка ImageCMS

Проблема
Не работает файл менеджер по всему (Imagecms 4.7)
Решение
Изменить строку в файле .htaccess
с этой

RewriteCond $1 !^(index\.php|test.php|user_guide|uploads/.*|favicon\.ico|favicon\.png|captcha/.*|application/modules/.*/templates|application/modules/.*/assets/js|application/modules/.*/assets/css|application/modules/.*/assets/images|CHANGELOG.xml|templates|js|robots\.txt|application/controllers/install/images/.*)

на вот эту

RewriteCond $1 !^(index\.php|application/third_party/(tinymce|filemanager).*|test.php|user_guide|uploads/.*|favicon\.ico|favicon\.png|captcha/.*|application/modules/.*/templates|application/modules/.*/assets/js|application/modules/.*/assets/css|application/modules/.*/assets/images|CHANGELOG.xml|templates|js|robots\.txt|application/controllers/install/images/.*)

Thumbs up Thumbs down

3 Отредактировано Vadim (03-04-2015 14:22:12)

Re: Мои исправления и доработка ImageCMS

Проблема
При вложености категорий они отображаются в корне категорий (Imagecms 4.7)
Решение
Зайти в файл application/modules/admin/categories.php

82 строка изменить

$cats = $this->sub_cats($tree); 

на

$cats = $tree;

Thumbs up Thumbs down

4 Отредактировано Vadim (03-04-2015 14:21:04)

Re: Мои исправления и доработка ImageCMS

Проблема (Imagecms 4.7)
Не работает скрип "Похожие новости". Выбивает ошибку
Fatal error: Call to a member function num_rows() on a non-object in /home/сайт мой/imagecms-shop/application/modules/core/core_widgets.php on line 157
Решение
Нужно зайти в файл /application/modules/core/core_widgets.php
найти функцию similar_posts удалить ее и заменить на новую

public function similar_posts($widget = array()) {
        $this->load->module('core');
        if ($this->core->core_data['data_type'] == 'page') {
            $sql = array();
            $title = $this->core->page_content['title'];
            $title = str_replace(array(',', ';', ':', '+', '=', '@', '.', '/', '\''), '', $title);
            $titleParts = explode(' ', $title);
            $titleParts += explode('-', $title);
            if (!empty($titleParts)) {
                foreach ($titleParts as $key => $text) {
                    $text = trim($text);
                    if ($text != '') {
                        $sql[] = "title LIKE '%$text%'";
                    }
                }
                
                if (!empty($sql)) {
                    $sql = 'SELECT content.*, CONCAT_WS("", content.cat_url, content.url) as full_url FROM content WHERE (' . implode(' OR ', $sql) . ') AND id != ' . $this->core->page_content['id'].' AND post_status = "publish" AND publish_date <= '.time().' AND lang='.$this->config->item('cur_lang').' LIMIT 5'; 
                    $query = $this->db->query($sql);
                    if ($query->num_rows() > 0) {
                        $data = array(
                            'pages' => $query->result_array(),
                        );
                    }
                    else{
                        $data = array(
                            'pages' => '',
                        );
                    }
                    return $this->template->fetch('widgets/' . $widget['name'], $data);
                }
            }
        }
    }

Thumbs up Thumbs down

5 Отредактировано Vadim (03-04-2015 14:21:44)

Re: Мои исправления и доработка ImageCMS

Проблема Imagecms 4.7
Нет возможности изменить отображение количество похожих новостей в виджетах
Решение
Заходим в файл /application/modules/core/core_widgets.php
вставляем код после функции similar_posts

public function similar_posts_configure($action = 'show_settings', $widget_data = array()) {
        if ($this->dx_auth->is_admin() == FALSE) {
            exit;
        }

        switch ($action) {
            case 'show_settings':
                $this->load->library('lib_category');
                $cats = $this->lib_category->build();
                $this->render('similar_posts_form', array('widget' => $widget_data, 'cats' => $cats));
                break;

            case 'update_settings':
                $this->form_validation->set_rules('news_count', lang("Amount of news", "core"), 'trim|required|is_natural_no_zero|min_length[1]');
                if ($this->form_validation->run($this) == FALSE) {
                    showMessage(validation_errors());
                } else {
                    $data = array(
                        'news_count' => $_POST['news_count'],
                    );
                    $this->load->module('admin/widgets_manager')->update_config($widget_data['id'], $data);
                    showMessage(lang("Settings have been saved", 'core'));
                    if ($_POST['action'] == 'tomain') {
                        pjax('/admin/widgets_manager/index');
                    }
                }
                break;
            case 'install_defaults':
                $this->load->module('admin/widgets_manager')->update_config($widget_data['id'], $this->defaults);
                break;
        }
    }

потом создаем файл в папке /application/modules/core/templates/similar_posts_form.tpl
с таким кодом

<section class="mini-layout">
    <div class="frame_title clearfix">
        <div class="pull-left">
            <span class="help-inline"></span>
            <span class="title">{lang("Widget settings", 'core')}<b> {$widget.name}</b></span>
        </div>
        <div class="pull-right">
            <div class="d-i_b">
                <a href="{$BASE_URL}admin/widgets_manager/index" class="t-d_n m-r_15 pjax"><span class="f-s_14">←</span> <span class="t-d_u">{lang("Go back", 'admin')}</span></a>
                <button type="button" class="btn btn-small btn-primary formSubmit" data-form="#widget_form" data-submit><i class="icon-ok"></i>{lang("Save", 'admin')}</button>
                <button type="button" class="btn btn-small formSubmit" data-form="#widget_form" data-action="tomain"><i class="icon-check"></i>{lang("Save and go back", 'admin')}</button>
            </div>
        </div>                            
    </div>
    <form action="{$BASE_URL}admin/widgets_manager/update_widget/{$widget.id}" id="widget_form" method="post" class="form-horizontal">
        <table class="table  table-bordered table-hover table-condensed content_big_td">
            <thead>
                <th>{lang("Settings", 'core')}</th>
            </thead>
            <tbody>
                <tr>
                    <td>
                        <div class="inside_padd">
                            <div class="control-group">
                                <label class="control-label" for="newscount">{lang("Number of news for display", 'core')}:</label>
                                <div class="controls">
                                    <input type="text" name="news_count" value="{$widget.settings.news_count}" id="newscount"/> 
                                </div>            
                            </div>
                        </div>
                    </td>
                </tr>
            </tbody>
        </table>
        {form_csrf()}
    </form>
</section>

и на последок добавим пару строк в файл /application/modules/core/core_widgets.php
после этих строк

public function similar_posts($widget = array()) {
        $this->load->module('core');

вставляем

        if ($widget['settings'] == FALSE) {
            $settings = $this->defaults;
        } else {
            $settings = $widget['settings'];
        }

и добавляем количество в SQL

$sql = 'SELECT content.*, CONCAT_WS("", content.cat_url, content.url) as full_url FROM content WHERE (' . implode(' OR ', $sql) . ') AND id != ' . $this->core->page_content['id'].' AND post_status = "publish" AND publish_date <= '.time().' AND lang='.$this->config->item('cur_lang').' LIMIT '.$settings['news_count']; 

http://clip2net.com/clip/m288060/983c0-clip-29kb.png?nocache=1
http://clip2net.com/clip/m288060/349b5-clip-23kb.png?nocache=1

Thumbs up Thumbs down

6

Re: Мои исправления и доработка ImageCMS

Проблема Imagecms 4.7
Нет возможности тимизировать Пагинацию на сайте
Решение
Создаем в своем шаблоне файл /templates/Ваш шаблон/pagination.tpl
вот содержимое этого файла

<div>
{if !empty($pages[0])}
<a href="{$pages[0]['href']}">Назад</a>
{/if}
{if !empty($pages[1])}
{for $i=0; $i < count($pages[1]); $i++}
    {if !empty($pages[1][$i]['href'])}
        <a href="{$pages[1][$i]['href']}">{$pages[1][$i]['loop']}</a>
    {else:}
        <span>{$pages[1][$i]['loop']}</span>
    {/if}
{/for}
{/if}
{if !empty($pages[2])}
<a href="{$pages[2]['href']}">Дальше</a>
{/if}
</div>

Чтобы это все работало нужно изменить пару файлов
Заходим в /application/modules/core/core.php
ищем строку

$this->template->assign('pagination',

и заменяем на

$this->template->assign('pagination', $this->template->read('pagination', array('pages' => $this->pagination->create_links())));

потом открываем файл /system/libraries/Pagination.php
вставляем после строки

if ($i == 0 && $this->first_url != '')
{
    $output .= $this->prev_tag_open.'<a '.$this->anchor_class.'href="'.$this->first_url.'">'.$this->prev_link.'</a>'.$this->prev_tag_close;

вот это

$output_arr[0]['href'] = $this->first_url;
$output_arr[0]['prev_link'] = $this->prev_link;

вставляем после строки

else
{
    $i = ($i == 0) ? '' : $this->prefix.$i.$this->suffix;
    $output .= $this->prev_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$i.'">'.$this->prev_link.'</a>'.$this->prev_tag_close;

вот это

$output_arr[0]['href'] = $this->base_url.$i;
$output_arr[0]['prev_link'] = $this->prev_link;

вставляем после строки

if ($this->cur_page == $loop)
{
    $output .= $this->cur_tag_open.$loop.$this->cur_tag_close; // Current page

вот это

$output_arr[1][$loop]['loop'] = $loop;

вставляем после строки

if ($n == '' && $this->first_url != '')
{
    $output .= $this->num_tag_open.'<a '.$this->anchor_class.'href="'.$this->first_url.'">'.$loop.'</a>'.$this->num_tag_close;

вот это

$output_arr[1][$loop]['href'] = $this->first_url;
$output_arr[1][$loop]['loop'] = $loop;

вставляем после строк

else
{
    $n = ($n == '') ? '' : $this->prefix.$n.$this->suffix;
        $output .= $this->num_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$n.'">'.$loop.'</a>'.$this->num_tag_close;

вот это

$output_arr[1][$loop]['href'] = $this->base_url.$n;
$output_arr[1][$loop]['loop'] = $loop;

вставляем после строк

// Render the "next" link
if ($this->next_link !== FALSE AND $this->cur_page < $num_pages)
{
    if ($this->use_page_numbers)
    {
        $i = $this->cur_page + 1;
    }
    else
    {
        $i = ($this->cur_page * $this->per_page);
    }
    $output .= $this->next_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$this->prefix.$i.$this->suffix.'">'.$this->next_link.'</a>'.$this->next_tag_close;

вот это

$output_arr[2]['href'] = $this->base_url.$this->prefix.$i.$this->suffix;
$output_arr[2]['next_link'] = $this->next_link;

вставляем после строк

// Render the "Last" link
if ($this->last_link !== FALSE AND ($this->cur_page + $this->num_links) < $num_pages)
{
    if ($this->use_page_numbers)
    {
        $i = $num_pages;
    }
    else
    {
        $i = (($num_pages * $this->per_page) - $this->per_page);
    }
    $output .= $this->last_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$this->prefix.$i.$this->suffix.'">'.$this->last_link.'</a>'.$this->last_tag_close;        

вот это

$output_arr[0]['href'] = $this->base_url.$this->prefix.$i.$this->suffix;
$output_arr[0]['last_link'] = $this->last_link;

И заменяем строку

return $output;

на

return $output_arr;

сохраняйте и проверяйте навигацию теперь можно тимизировать в файле /templates/Ваш шаблон/pagination.tpl

Thumbs up +2 Thumbs down