Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
xxx
цитировать
Зарегистрирован: 03 Мар 2008 15:58:41 Сообщения: 24
|
Добавлено: 15 Мар 2008 13:00:46 Заголовок сообщения: файл как datasource для модели |
|
|
Есть модель, скажем page которая хранит название файла страницы которую хотим редактировать типа
page:
id:1 filename:index.html
хотелось бы что бы модель отдавала контролелру содержимое index.html как часть объекта $this->Page и при сохранении соответственно сохраняла бы Page['contents'] в index.html а остальное в БД
Результатом хочу получить в view форму сделанную хелпером, где одним из полей будет содержимое index.html
или это не рально?
может быть есть какой то другой способ? |
|
Вернуться к началу |
|
|
DeeperMD
цитировать
Зарегистрирован: 08 Фев 2008 15:04:11 Сообщения: 144 Откуда: $Молдова->Кишинёв->Буюканы()
|
Добавлено: 15 Мар 2008 14:38:18 Заголовок сообщения: |
|
|
Ну со view всё понятно наверное..
А с моделью реально почему не реально..
Залазаешь в модель пишешь там свою функцию, которая хоть борщ готовит , а потом её вызываешь.. как будто это стандартный find...
сохранение тоже не очень сложное, просто перегружаешь метод save в модели делаешь всё что нужно (тобишь пишешь contents в файл и потом в этот же contents записываешь имя файла), далее полученный из контроллера массив (модифицированный твоей перегрузкой) подсовываешь стандартному save.
Вот и всё..
Если кто знает другой метод или где-то рациональнее, сам приму к сведению..
|
|
Вернуться к началу |
|
|
KPOTOB
цитировать
Зарегистрирован: 09 Дек 2007 14:46:20 Сообщения: 127
|
Добавлено: 15 Мар 2008 17:24:53 Заголовок сообщения: |
|
|
xxx
Имплименть beforeSave в AppModel или в Behavior. Но понимай что транзакционности не будет |
|
Вернуться к началу |
|
|
xxx
цитировать
Зарегистрирован: 03 Мар 2008 15:58:41 Сообщения: 24
|
Добавлено: 15 Мар 2008 19:14:52 Заголовок сообщения: |
|
|
мне бы примеры, я ничего умнее такого пока не придумал:
модель
function getElementContent($filename = null)
{
$x = fopen($filename.".ctp", "r");
$contents = fread($x, filesize($filename.".ctp"));
fclose($x);
return $contents;
}
контролер
$this->set('content', $this->ProjElement->getElementContent("../views/".$element['ProjElement']['dir']."/".$element['ProjElement']['filename']));
view
<textarea cols="75" rows="30" >
<?php echo $content ?>
</textarea> |
|
Вернуться к началу |
|
|
DeeperMD
цитировать
Зарегистрирован: 08 Фев 2008 15:04:11 Сообщения: 144 Откуда: $Молдова->Кишинёв->Буюканы()
|
Добавлено: 15 Мар 2008 19:31:09 Заголовок сообщения: |
|
|
Хмм..
А если поразмыслить...
Модель:
Код: | function findWithContent($id = null)
{
$row = $this->findById($id)
$filename = $row['Model']['contents'];
$x = fopen($filename, "r");
$row['Model']['contents']= fread($x, filesize($filename));
fclose($x);
return $row;
} |
Котроллер:
Код: | $this->set('content', $this->Model->findWithContent($id)); |
View:
Код: | <div>
<?=$content['Model']['title'] ?>
<div>
<textarea cols="75" rows="30" >
<?=$content['Model']['contents'] ?>
</textarea> |
А вобще посоветую.. если юзаете объектно ориентированный фрэймворк, то переводите мышление на ООП... |
|
Вернуться к началу |
|
|
xxx
цитировать
Зарегистрирован: 03 Мар 2008 15:58:41 Сообщения: 24
|
Добавлено: 15 Мар 2008 21:44:43 Заголовок сообщения: |
|
|
спасибо, поприличней выглядит чем мой вариант
Цитата: | А вобще посоветую.. если юзаете объектно ориентированный фрэймворк, то переводите мышление на ООП... |
стараюсь, но не всегда получается |
|
Вернуться к началу |
|
|
|