Страница 1 из 1

Получить тест из блока на другой странице.

СообщениеДобавлено: 05 фев 2013, 21:57
guyasyou
Переделываю шаблон page list. Появилась задача высосать текст из блока на подстранице и сократить.

Следующий вариант не подходит:
Код: Выделить всё
$a = new Area('Preview');
      $a->disableControls();
      $descr = $a->display($cobj);

Так как мне нужно сократить текст через
Код: Выделить всё
echo $textHelper->wordSafeShortText($text,$controller->truncateChars);


как получить текст из блока в пременную $text?
Ну или другие способы сокращение текста до N символов.

Re: Получить тест из блока на другой странице.

СообщениеДобавлено: 06 фев 2013, 10:04
cmsservice
Только вчера делали нечто подобное. :)

Если известен cID страницы и имя позиции на которой лежит блок, то можно сделать так.

Код: Выделить всё
$page = Page::getByID($cID); // id подстраницы
$blocks = $page->getBlocks('Preview'); // получим все блоки в заданной позиции
foreach($blocks as $b) { // перебором блоков, найдем нужный
  if($b->btHandle==$sLocateHandle) break;  // здесь можно проверять по разным полям, какое для Вас удобнее
}
//...
// дальше уже работаете с моделью блока так как Вам нужно

Re: Получить тест из блока на другой странице.

СообщениеДобавлено: 06 фев 2013, 13:01
guyasyou
Я до объекта Block докапывался. Когда выводил его через var_dump, в глубинах объекта был и мой искомый текст. Тока вот как до него докопаться?

Re: Получить тест из блока на другой странице.

СообщениеДобавлено: 06 фев 2013, 13:56
cmsservice
Правильно я понимаю, что искомый текст хранится в таблице блока в базе?

Тогда есть два выхода:
1. получаете через модель блока контроллер, он когда создается, то подгружает из базы данные, которые доступны через метод get контроллера.
2. тупо выбираете данные из базы, ведь у Вас есть bID (в модели). :)

Первый способ более правильный по философии программирования, а второй, боюсь, может оказаться более быстрым при правильном подходе :)

Re: Получить тест из блока на другой странице.

СообщениеДобавлено: 08 фев 2013, 22:38
Count_Raven
cmsservice писал(а):Правильно я понимаю, что искомый текст хранится в таблице блока в базе?

Тогда есть два выхода:
1. получаете через модель блока контроллер, он когда создается, то подгружает из базы данные, которые доступны через метод get контроллера.
2. тупо выбираете данные из базы, ведь у Вас есть bID (в модели). :)

Первый способ более правильный по философии программирования, а второй, боюсь, может оказаться более быстрым при правильном подходе :)


Он дамп объекта делает, нахрен ему база, если данные уже получены.
Контроллер уже доступен и объект уже инициализирован.

Работай уже с объектом или с его потомками. Loader::model - поехали!

Re: Получить тест из блока на другой странице.

СообщениеДобавлено: 08 фев 2013, 22:50
Count_Raven
Или я чего не понимаю, но загружай тогда контроллер блока, ему давай ID блока и получай его данные через контроллер. Что не так?

Re: Получить тест из блока на другой странице.

СообщениеДобавлено: 09 фев 2013, 00:21
cmsservice
Ему даже этого делать не надо, у модели блока контроллер запрашиваешь и вот он весь уже инициализированный.

Мы тут на днях делали для одного сайта, форма заказа на одной странице, а ее интерфейс еще может вызываться во всплывающем окне с двух других станиц, так вот мы из того, что установлен на странице заказа получаем параметры различные, заданные в дизайн-тайме. Все великолепно работает. ИМХО похожая задача.

Re: Получить тест из блока на другой странице.

СообщениеДобавлено: 09 фев 2013, 00:42
Count_Raven
cmsservice писал(а):Мы тут на днях делали для одного сайта, форма заказа на одной странице, а ее интерфейс еще может вызываться во всплывающем окне с двух других станиц, так вот мы из того, что установлен на странице заказа получаем параметры различные, заданные в дизайн-тайме. Все великолепно работает. ИМХО похожая задача.

Может офтопик, но в Concrete5 для повторяющихся элементов (прямо на странице или в окнах или вообще отдельно) используются elements. А уже внутри elements можно определить поведение. Это в Concrete5 повсюду. В поиске файлов, страниц, в менеджере файлов и т.д. и т.п. Сам зачастую игнорирую этот метод, так как иногда он как-то не очень мне подходит из-за моей собственной архитектуры. Но вообще - удобно, иногда использую.
Код: Выделить всё
Loader::element.............или
Loader::packageElement('path_to_element', 'package_handler', array(пары key => value - параметры для передачи - будут переменными в итоге));

Re: Получить тест из блока на другой странице.

СообщениеДобавлено: 09 фев 2013, 15:28
cmsservice
Про элементы знаем, но здесь не тот случай :)