Как Сделать Контроллер К Модулю


#1

Я взял модуль my_chenges в нем сделал хук к блоку my_account, таким образом я из файла .tpl , в модуле вывожу информацию на витрину шаблона и удобно передвигать блок через менеджер блоков. Стоит задача вывести в этот созданный мною модуль информацию из My_sql название категории, id и описание , я сделал хук в файле модуля получил данные . а вот теперь как передать переменные из файла модуля в фаил шаблона, не могу понять как сделать контроллер.


#2

Я взял модуль my_chenges в нем сделал хук к блоку my_account, таким образом я из файла .tpl , в модуле вывожу информацию на витрину шаблона и удобно передвигать блок через менеджер блоков. Стоит задача вывести в этот созданный мною модуль информацию из My_sql название категории, id и описание , я сделал хук в файле модуля получил данные . а вот теперь как передать переменные из файла модуля в фаил шаблона, не могу понять как сделать контроллер.

Контроллер не нужен, контроллер это главный файл страницы.

Давайте вы перечислите файлы которые сделали сейчас, чтобы было понятно, так как сейчас непонятно.


#3

Я взял модуль my_chenges в нем сделал хук к блоку my_account, таким образом я из файла .tpl , в модуле вывожу информацию на витрину шаблона и удобно передвигать блок через менеджер блоков. Стоит задача вывести в этот созданный мною модуль информацию из My_sql название категории, id и описание , я сделал хук в файле модуля получил данные . а вот теперь как передать переменные из файла модуля в фаил шаблона, не могу понять как сделать контроллер.

Ответ на вопрос "Как сделать контроллер?" есть во втором видео курса для разработчиков.

http://www.cs-cart.ru/video?video_id=140890939

Только у меня ощущение, что вам нужно не это. Опишите задачу, что вы делаете?

Скорее всего вам нужно посмотреть про "Как работают блоки"

http://www.cs-cart.ru/videos?channel=devel#3590092


#4

Я создал свой блок на базе блока my_account

в точности по инструкции из статьи http://www.cs-cart.ru/docs/4.3.x/developer/solutions/design/my_account/index.html?highlight=%D0%BC%D0%BE%D0%B9%20%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D1%8C

содержимое выводиться все в порядке. Вот только я захотел вывести там данные из бд, название категорий товаров и их описание ну или хоть что то, создал файлы app/addons/my_changes/func.php

с кодом

<?php

function fn_my_changes_get_category_name_post(&$category_id, &$lang_code, &$as_array, &$name) {
return $name;
}

и файл app/addons/my_changes/init.php

с кодом

<?php

if (!defined(‘BOOTSTRAP’)) { die(‘Access denied’); }

fn_register_hooks(
‘get_category_name_post’
);

ну и хочу теперь вывести переменную $name в файле вывода шаблона themes/responsive/templates/addons/my_changes/blocks/my_block.tpl

{** block-description:my_block**}

Тестируем создание нового шаблона

{$name}

ну и переменная $name не отображается.

Вот и предположил что нужен контроллер что бы передать переменную в шаблон.

Создал в файл app/addons/my_changes/controllers/frontend/my_block.php

с кодом

<?php

use Tygh\Registry;

if (!defined(‘BOOTSTRAP’)) { die(‘Access denied’); }

if ($mode == ‘view’) {

$test = 'Текст';
 Tygh::$app['view']->assign('test', $test);

}

потом в файле вывода шаблона themes/responsive/templates/addons/my_changes/blocks/my_block.tpl , добавил переменную {$test}, ну для тестирования и она не отобразилась, по этому и задаю вопрос что я делаю не так, и если контроллер для этого не нужен то как мне передать переменную в шаблонизатор и где работать с БД. Сразу спасибо и извините за глупый вопрос я новичок и очень хочу разобраться.


#5

Я создал свой блок на базе блока my_account

в точности по инструкции из статьи http://www.cs-cart.ru/docs/4.3.x/developer/solutions/design/my_account/index.html?highlight=%D0%BC%D0%BE%D0%B9%20%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D1%8C

потом в файле вывода шаблона themes/responsive/templates/addons/my_changes/blocks/my_block.tpl , добавил переменную {$test}, ну для тестирования и она не отобразилась, по этому и задаю вопрос что я делаю не так, и если контроллер для этого не нужен то как мне передать переменную в шаблонизатор и где работать с БД. Сразу спасибо и извините за глупый вопрос я новичок и очень хочу разобраться.

Понятно. Вы спешите. Вы пытаетесь всё запустить на угад или магически. Так не бывает.

Честно вам скажу, посмотрите видео, это в 100 раз быстрее и надёжней, чем разбираться самому.

Там есть ответы на ваши вопросы, просто посмотрите курс разработчика и сможете делать всё сами.

http://www.cs-cart.ru/videos?channel=devel

Сейчас вы перепутали контроллеры с хуками.

У вас есть какая то конкретная цель? Или вы просто хотите научиться.

Если есть цель, то рассказывайте. Если научиться то смотрите видео, с самого начала ну или по смыслу. Потратьте на это 3 часа и сможете делать на много больше и намного лучше.


#6

Спасибо за дельный совет, просмотрел все ваши ролики много стало понятно, но моя проблема еще не решена.

У меня задача вывести на главную 4 или больше блоков с названием категории товаров и описанием. Схематически так

default-1699e551c16c23c16b091c477121ea09

Я поискал хуки нашел функцию get_category_name_post, вывел через fn_print_r($name); массив выводиться т.е. с ним можно там поработать, но вот как передать этот массив с данными в мой заблаговременно созданный блок это вопрос. Ну я не далекий вообще человек просто по видео искали контроллеры при помощи dispatch, а на главной странице только название домена и все.

Вообщем если задаю не те вопросы вы поставьте меня на праведный путь в решении моей задачи.

И сразу говорю вам спасибо за ответ.


#7

Спасибо за дельный совет, просмотрел все ваши ролики много стало понятно, но моя проблема еще не решена.

У меня задача вывести на главную 4 или больше блоков с названием категории товаров и описанием. Схематически так

default-1699e551c16c23c16b091c477121ea09

Я поискал хуки нашел функцию get_category_name_post, вывел через fn_print_r($name); массив выводиться т.е. с ним можно там поработать, но вот как передать этот массив с данными в мой заблаговременно созданный блок это вопрос. Ну я не далекий вообще человек просто по видео искали контроллеры при помощи dispatch, а на главной странице только название домена и все.

Вообщем если задаю не те вопросы вы поставьте меня на праведный путь в решении моей задачи.

И сразу говорю вам спасибо за ответ.

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

Дело в том, что уже есть блок "Категории" , который может вывести список категорий в колонках. Вам нужно просто его расширить, чтобы он выводил ещё и описание. Понимаете? Посмотрите как работают блоки, найдите блок "Категории", найдите функцию которая получает данные для этого блока, расширьте её или сделайте свой блок аналогично.

Есть видео о том как работают блоки, оно поможет вам, всё там же, в разделе "Блоки" для разработчиков.


#8

Я вот создал свой блок составил схему но все таки не что то не так.

схема

$schema['my_block'] = array (
    'templates' => array(
        'addons/my_block/blocks/my_block.tpl' => array(),
    ),
    'wrappers' => 'blocks/wrappers',
	'content' => array(
		'type' => 'function',
		'object' => 'categories',
		'function' => array('get_category_name_post')
	),
);
return $schema;

func.php файл

function fn_my_block_get_category_name_post($category_id, $lang_code, $as_array, &$name) {

return $name;
}

ну и в смарти шаблоне если написать {fn_print_r|$name} то 0 эмоций.

Я склоняюсь что напутал что то со схемой. Не могу разобраться как контент передается.


#9

Я вот создал свой блок составил схему но все таки не что то не так.

схема

$schema['my_block'] = array (
    'templates' => array(
        'addons/my_block/blocks/my_block.tpl' => array(),
    ),
    'wrappers' => 'blocks/wrappers',
	'content' => array(
		'type' => 'function',
		'object' => 'categories',
		'function' => array('get_category_name_post')
	),
);
return $schema;

func.php файл

function fn_my_block_get_category_name_post($category_id, $lang_code, $as_array, &$name) {

return $name;
}

ну и в смарти шаблоне если написать {fn_print_r|$name} то 0 эмоций.

Я склоняюсь что напутал что то со схемой. Не могу разобраться как контент передается.

Я не знаю зачем вы создали такую функцию и почему вы ожидаете там name , тем более в смарти функция пишется вперёд переменной.

func.php у вас вообще непонятно зачем.

в схеме 'content' не правильный

ну и в шаблоне, функция распечатки подставляется после переменной.

Вы спешите, в CS-Cart нет магии, а вы пытаетесь проскочить наугад.

Зачем вам вообще функция (func.php) ?


#10

Не знаю насколько это оптимально, но мое решение аналогичной задачи такое:

1) app/addons/my_module/

  • addon.xml
    <?xml version="1.0"?>
    
        my_module
        1.0
        MULTIVENDOR,ULTIMATE
        ru
    
    

Простой модуль.

  • schemas/block_manager/blocks.post.php
    <?php
    

    use Tygh\Registry;

    $schema[‘my_block’] = array(
    ‘templates’ => array(
    ‘addons/my_module/blocks/my_block.tpl’ => array(),
    ),
    ‘content’ => array(
    ‘items’ => array(
    ‘type’ => ‘enum’,
    ‘object’ => ‘categories’,
    ‘items_function’ => ‘fn_get_categories’,
    ‘remove_indent’ => true,
    ‘hide_label’ => true,
    ‘fillings’ => array(
    ‘manually’ => array(
    ‘params’ => array(
    ‘plain’ => true,
    ‘simple’ => false,
    ‘group_by_level’ => false,
    ),
    ‘picker’ => ‘pickers/categories/picker.tpl’,
    ‘picker_params’ => array(
    ‘multiple’ => true,
    ‘use_keys’ => ‘N’,
    ‘status’ => ‘A’,
    ‘positions’ => true,
    ),
    ),
    ‘newest’ => array(
    ‘params’ => array(
    ‘sort_by’ => ‘timestamp’,
    ‘plain’ => true,
    ‘visible’ => true
    ),
    ‘period’ => array(
    ‘type’ => ‘selectbox’,
    ‘values’ => array(
    ‘A’ => ‘any_date’,
    ‘D’ => ‘today’,
    ‘HC’ => ‘last_days’,
    ),
    ‘default_value’ => ‘any_date’
    ),
    ‘last_days’ => array(
    ‘type’ => ‘input’,
    ‘default_value’ => 1
    ),
    ‘limit’ => array(
    ‘type’ => ‘input’,
    ‘default_value’ => 3
    )
    ),
    ‘full_tree_cat’ => array(
    ‘params’ => array(
    ‘plain’ => true
    ),
    ‘update_params’ => array(
    ‘request’ => array(’%CATEGORY_ID’),
    ),
    ‘settings’ => array(
    ‘parent_category_id’ => array(
    ‘type’ => ‘picker’,
    ‘default_value’ => ‘0’,
    ‘picker’ => ‘pickers/categories/picker.tpl’,
    ‘picker_params’ => array(
    ‘multiple’ => false,
    ‘use_keys’ => ‘N’,
    ‘default_name’ => __(‘root_level’),
    ),
    ),
    ‘sort_by’ => array(
    ‘type’ => ‘selectbox’,
    ‘values’ => array(
    ‘position’ => ‘position’,
    ‘name’ => ‘name’,
    ),
    ‘default_value’ => ‘position’
    ),
    ),
    ),
    ),
    )
    ),
    ‘cache’ => array(
    ‘update_handlers’ => array(‘categories’, ‘category_descriptions’),
    ),
    );

    return $schema;

В модуле есть блок с категориями (в параметрах блока их можно будет выбирать) и шаблоном

  • init.php
    <?php
    if (!defined('BOOTSTRAP')) { die('Access denied'); }
    

    fn_register_hooks(
    ‘get_categories’
    );

Подключились к хуку получения категорий

  • func.php
    <?php
    

    function fn_my_module_get_categories($params, $join, $condition, &$fields, $group_by, $sortings, $lang_code) {
    $fields[] = ‘?:category_descriptions.description’;
    }

В хуке добавили к выбираемым полям описание для категории

2) app/design/themes/my_theme/templates/addons/my_module/blocks/

  • my_block.tpl
    {$items|var_dump}
    

В шаблоне доступен массив категорий с описанием.


#11

‘object’ => ‘categories’,

Что это означает и как это использовать?