Помощь Подружить smartshortcode и smartblog

SmileNet

Постоялец
Регистрация
6 Окт 2012
Сообщения
77
Реакции
24
Здравствуйте. Нужна помощь.
преста 1.6.1.4 Smartblog 2.0.1 Smartshortcode 2.3.0

Smartshortcode выводится на станицах, но категорично отказывается работать в постах Smartblog. После создания тега в редакторе: [alert_box class="box_alert_warning"]Текст[/alert_box] он в этом же виде выводится на странице поста. Как это победить?
 
Здравствуйте. Нужна помощь.
преста 1.6.1.4 Smartblog 2.0.1 Smartshortcode 2.3.0

Smartshortcode выводится на станицах, но категорично отказывается работать в постах Smartblog. После создания тега в редакторе: [alert_box class="box_alert_warning"]Текст[/alert_box] он в этом же виде выводится на странице поста. Как это победить?
нужно я думаю вносить правки в контроллер вывода информации смартблог по аналогии с самим модулем... похожая тема или вопрос уже встречались... только вот решения не помню...
 
Это исходник модуля (из темы), еще до установки smartshortcode. На сколько я понял оба модуля от SmartDataSoft, и должны быть совместимы изначально. Пока переписывал шаблон и искал как решить проблему с обрезкой тегов, попадалась инфа по данной проблеме, но не прямым поиском, а через несколько сайтов и теперь не могу ее найти.
PHP:
public static function getPost($id_post,$id_lang = null){
        $result = array(); 
        if($id_lang == null){
                    $id_lang = (int)Context::getContext()->language->id;
                }
        $sql = 'SELECT * FROM '._DB_PREFIX_.'smart_blog_post p INNER JOIN
                '._DB_PREFIX_.'smart_blog_post_lang pl ON p.id_smart_blog_post=pl.id_smart_blog_post INNER JOIN
                '._DB_PREFIX_.'smart_blog_post_shop ps ON pl.id_smart_blog_post = ps.id_smart_blog_post
                WHERE pl.id_lang='.$id_lang.'
                AND p.active= 1 AND p.id_smart_blog_post = '.$id_post;
       
        if (!$post = Db::getInstance()->executeS($sql))
            return false;
                $result['id_post'] = $post[0]['id_smart_blog_post'];
                $result['meta_title'] = $post[0]['meta_title'];
                $result['meta_description'] = $post[0]['meta_description'];
                $result['short_description'] = $post[0]['short_description'];
                $result['meta_keyword'] = $post[0]['meta_keyword'];
                if((Module::isEnabled('smartshortcode') == 1) && (Module::isInstalled('smartshortcode') == 1)){
                 require_once(_PS_MODULE_DIR_ . 'smartshortcode/smartshortcode.php');
                $smartshortcode = new SmartShortCode();
                $result['content'] = $smartshortcode->parse($post[0]['content']);
                }else{
               
                 $result['content'] = $post[0]['content'];
                 }
                $result['active'] = $post[0]['active'];
                $result['created'] = $post[0]['created'];
                $result['comment_status'] = $post[0]['comment_status'];
                $result['viewed'] = $post[0]['viewed'];
                $result['is_featured'] = $post[0]['is_featured'];
                $result['post_type'] = $post[0]['post_type'];
                $result['id_category'] = $post[0]['id_category'];
                $employee = new  Employee($post[0]['id_author']);
                $result['lastname'] = $employee->lastname;
                $result['firstname'] = $employee->firstname;
                if (file_exists(_PS_MODULE_DIR_.'smartblog/images/' . $post[0]['id_smart_blog_post'] . '.jpg') )
                {
                   $image =   $post[0]['id_smart_blog_post'] . '.jpg';
                   $result['post_img'] = $image;
        }
                else
                {
                   $result['post_img'] =NULL;
                }
        return $result;
    }
 
Это исходник модуля (из темы), еще до установки smartshortcode. На сколько я понял оба модуля от SmartDataSoft, и должны быть совместимы изначально. Пока переписывал шаблон и искал как решить проблему с обрезкой тегов, попадалась инфа по данной проблеме, но не прямым поиском, а через несколько сайтов и теперь не могу ее найти.
PHP:
public static function getPost($id_post,$id_lang = null){
        $result = array();
        if($id_lang == null){
                    $id_lang = (int)Context::getContext()->language->id;
                }
        $sql = 'SELECT * FROM '._DB_PREFIX_.'smart_blog_post p INNER JOIN
                '._DB_PREFIX_.'smart_blog_post_lang pl ON p.id_smart_blog_post=pl.id_smart_blog_post INNER JOIN
                '._DB_PREFIX_.'smart_blog_post_shop ps ON pl.id_smart_blog_post = ps.id_smart_blog_post
                WHERE pl.id_lang='.$id_lang.'
                AND p.active= 1 AND p.id_smart_blog_post = '.$id_post;
      
        if (!$post = Db::getInstance()->executeS($sql))
            return false;
                $result['id_post'] = $post[0]['id_smart_blog_post'];
                $result['meta_title'] = $post[0]['meta_title'];
                $result['meta_description'] = $post[0]['meta_description'];
                $result['short_description'] = $post[0]['short_description'];
                $result['meta_keyword'] = $post[0]['meta_keyword'];
                if((Module::isEnabled('smartshortcode') == 1) && (Module::isInstalled('smartshortcode') == 1)){
                 require_once(_PS_MODULE_DIR_ . 'smartshortcode/smartshortcode.php');
                $smartshortcode = new SmartShortCode();
                $result['content'] = $smartshortcode->parse($post[0]['content']);
                }else{
              
                 $result['content'] = $post[0]['content'];
                 }
                $result['active'] = $post[0]['active'];
                $result['created'] = $post[0]['created'];
                $result['comment_status'] = $post[0]['comment_status'];
                $result['viewed'] = $post[0]['viewed'];
                $result['is_featured'] = $post[0]['is_featured'];
                $result['post_type'] = $post[0]['post_type'];
                $result['id_category'] = $post[0]['id_category'];
                $employee = new  Employee($post[0]['id_author']);
                $result['lastname'] = $employee->lastname;
                $result['firstname'] = $employee->firstname;
                if (file_exists(_PS_MODULE_DIR_.'smartblog/images/' . $post[0]['id_smart_blog_post'] . '.jpg') )
                {
                   $image =   $post[0]['id_smart_blog_post'] . '.jpg';
                   $result['post_img'] = $image;
        }
                else
                {
                   $result['post_img'] =NULL;
                }
        return $result;
    }
в этом коде, на сколько я вижу всё есть для верной работы...

PHP:
if((Module::isEnabled('smartshortcode') == 1) && (Module::isInstalled('smartshortcode') == 1)){
                 require_once(_PS_MODULE_DIR_ . 'smartshortcode/smartshortcode.php');
                $smartshortcode = new SmartShortCode();
                $result['content'] = $smartshortcode->parse($post[0]['content']);
                }else{
              
                 $result['content'] = $post[0]['content'];
                 }
 
Я то же так думал, но косяк где то есть, а вот мыслей пока нет ( Что то не дает преобразовывать теги. И не могу понять как подключается

PHP:
<?php
  function sds_alert_box($atts, $content = null, $tag, $hook_name) {
        extract(SmartShortCode::shortcode_atts(array(
            'class' => ''
        ), $atts));
        return '<div class="box_alert">
                    <div class="'.$class.'">
                        <div class="box_alert_box_img">
                            <img class="box_alert_img" src="/img/textblock/'.$class.'.png"></img>
                        </div>
                        <div class="box_alert_text">'
                            .SmartShortCode::do_shortcode($content,$hook_name).
                        '</div>
                    </div>
                </div>';    
    }
    SmartShortCode::add_shortcode('alert_box', 'sds_alert_box');

на страницах, что б сравнить

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

В общем суть в том, что shortcode.php не подключался в smartblog.
Путем тыка поиска, нашел где и откуда не подключается. Вот вся цепочка:
За вывод на страницу отвечает SmartBlogPost.php:78

PHP:
if((Module::isEnabled('smartshortcode') == 1) && (Module::isInstalled('smartshortcode') == 1)){
                 require_once(_PS_MODULE_DIR_ . 'smartshortcode/smartshortcode.php');
                $smartshortcode = new SmartShortCode();
                $result['content'] = $smartshortcode->parse($post[0]['content']);

в 79 строке подключается smartshortcode.php через который подключаются все остальные скрипты smartshortcode. Сам smartshortcode.php подключался, но почему то (для ответа на этот вопрос у меня знаний не хватает) не подключался:

PHP:
include "{$dir}/{$file}/front/shortcode.php";

Полностью код: smartshortcode.php:226

PHP:
public function hooksdsShortcodeFront($params){
        $context = isset($this->context) ? $this->context : Context::getContext() ;
        $dir = dirname(__FILE__).'/addons';    
        if (is_dir($dir) && (!isset($context->controller->controller_type) || $context->controller->controller_type == 'front')) {
            if ($dh = opendir($dir)) {
                while (($file = readdir($dh)) !== false) {
                    if($file != '.' && $file != '..'){
                        if(is_dir("{$dir}/{$file}/front")){
                            include "{$dir}/{$file}/front/shortcode.php";                      
                        }
                    }
                }
                closedir($dh);
            }
        }
    }
Сам хук (на сколько я понимаю что это хук) на страницах престы работает, но вот в модуль блога почему то не хочет "заходить"

В итоге подключил shortcode.php непосредственно в SmartBlogPost.php

PHP:
if((Module::isEnabled('smartshortcode') == 1) && (Module::isInstalled('smartshortcode') == 1)){
                 require_once(_PS_MODULE_DIR_ . 'smartshortcode/smartshortcode.php');
                 require_once(_PS_MODULE_DIR_ . 'smartshortcode/addons/alert_box/front/shortcode.php');
                $smartshortcode = new SmartShortCode();
                $result['content'] = $smartshortcode->parse($post[0]['content']);
Результат положительный шорткоды обрабатываются

С остальными не пробовал, не знаю только этот не работает в блоге или все. Как попробую отпишусь
 
Последнее редактирование:
Назад
Сверху