«Автоматические» выходные поля в CakePHP? - PullRequest
3 голосов
/ 17 февраля 2010

В настоящее время я использую «автоматические» элементы поля CakePHP для своих форм CRUD.
Я имею в виду, что я использую

echo $form->input('fieldname', $options);

метод для генерации всего.

Это выбирает правильный тип элемента и упаковывает все в div с элементом

Теперь у меня есть некоторые поля, которые нельзя редактировать, но я хотел бы, чтобы они отображались (так что на самом деле не было бы метки, просто диапазон, и вместо элемента управления , было бы просто какой-нибудь текст или интервал.
Мне также нужно иметь возможность произвольно контролировать содержимое «значения поля».

Есть ли способ сделать это с помощью $ form-> input?
Я знаю, что могу просто сгенерировать разметку для всего этого, но это выглядело бы довольно уродливо, и это очень повторяющееся.

Спасибо!
Daniel

Ответы [ 6 ]

2 голосов
/ 17 февраля 2010

Вы всегда можете оставить их в качестве входных данных, но уберите опцию редактирования. Добавление 'readonly' => true к входным параметрам должно добавить к входу что-то вроде этого: readonly="readonly".

1 голос
/ 18 февраля 2010

Тебе лучше сделать:

$form->data["fieldname"]

и окружая его любой разметкой, которая вам требуется. Если вам нужно, добавьте своего помощника, как предложил Ричард.

Но НИКОГДА не меняйте ядро. Это только даст вам головную боль дальше.

1 голос
/ 18 февраля 2010

Вам не нужно (не нужно никогда!) Трогать основные файлы.

Вы можете создать свой собственный FormHelper на основе встроенного и переопределить метод ввода.

Вот как я переопределяю метод сортировки HtmlHelper для добавления классов направления сортировки для разбитых на страницы таблиц:

http://richardathome.com/blog/cakephp-extend-paginatorhelper-indicate-sort-field-and-direction

1 голос
/ 17 февраля 2010

Как насчет:

$html->tag("span", $form->data["fieldname"]);

Если это слишком уродливо, вы можете написать свой собственный помощник:

<?php
class WhateverHelper extends AppHelper {
    var $helpers = array('Html');
    function whatever($fieldname) {
        return $this->Html->tag("span", $form->data[$fieldname]);
    }
}
?>
0 голосов
/ 19 февраля 2010

echo $ form-> input ('нечто', массив ('div' => false, 'label' => false));

0 голосов
/ 17 февраля 2010

В итоге я изменил CakePHP: - (

Я просто добавил возможность сделать это:

echo $form->input('customer_id', array('type' => 'output', 'value' => 'xxxx' ));

Это было относительно тривиально, хотя я бы предпочел не трогать файлы ядра.

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

Надеюсь, это кому-нибудь поможет!

...