Skip to content

Instantly share code, notes, and snippets.

@wodCZ
Created April 23, 2015 15:06
Show Gist options
  • Save wodCZ/d2f802f028e552155597 to your computer and use it in GitHub Desktop.
Save wodCZ/d2f802f028e552155597 to your computer and use it in GitHub Desktop.
BS3FormRenderer
<?php
namespace App\Forms;
use Nette\Forms\Controls;
use Nette\Forms\Form;
/**
* Class BS3FormRenderer
*
* @package App\Forms
*/
class BS3FormRenderer
{
/**
* BS3 form renderer. Taken from https://github.com/nette/forms/blob/master/examples/bootstrap3-rendering.php
*
* @param Form $form
* @param int $labelColumns
* @param int $controlColumns
*/
public static function horizontal(Form $form, $labelColumns = 3, $controlColumns = 9)
{
$renderer = $form->getRenderer();
$renderer->wrappers['controls']['container'] = NULL;
$renderer->wrappers['pair']['container'] = 'div class=form-group';
$renderer->wrappers['error']['container'] = NULL;
$renderer->wrappers['error']['item'] = 'div class="alert alert-danger"';
$renderer->wrappers['pair']['.error'] = 'has-error';
$renderer->wrappers['control']['container'] = "div class=col-sm-$controlColumns";
$renderer->wrappers['label']['container'] = "div class=\"col-sm-$labelColumns control-label\"";
$renderer->wrappers['control']['description'] = 'span class=help-block';
$renderer->wrappers['control']['errorcontainer'] = 'span class=help-block';
$form->getElementPrototype()->class[] = 'form-horizontal';
self::addInputClasses($form);
}
/**
* @param \Nette\Forms\Form $form
*/
public static function vertical(Form $form)
{
$renderer = $form->getRenderer();
$renderer->wrappers['controls']['container'] = NULL;
$renderer->wrappers['pair']['container'] = 'div class=form-group';
$renderer->wrappers['error']['container'] = NULL;
$renderer->wrappers['error']['item'] = 'div class="alert alert-danger"';
$renderer->wrappers['pair']['.error'] = 'has-error';
$renderer->wrappers['control']['container'] = NULL;
$renderer->wrappers['label']['container'] = NULL;
$renderer->wrappers['control']['description'] = 'span class=help-block';
$renderer->wrappers['control']['errorcontainer'] = 'span class=help-block';
$form->getElementPrototype()->class[] = 'form-horizontal';
self::addInputClasses($form);
}
/**
* @param Form $form
*/
private static function addInputClasses(Form $form)
{
foreach ($form->getControls() as $control) {
if ($control instanceof Controls\Button) {
$control->getControlPrototype()->addClass(empty($usedPrimary) ? 'btn btn-success' : 'btn btn-default');
$usedPrimary = TRUE;
} elseif ($control instanceof Controls\TextBase || $control instanceof Controls\SelectBox || $control instanceof Controls\MultiSelectBox) {
$control->getControlPrototype()->addClass('form-control');
} elseif ($control instanceof Controls\Checkbox || $control instanceof Controls\CheckboxList || $control instanceof Controls\RadioList) {
$control->getSeparatorPrototype()->setName('div')->addClass($control->getControlPrototype()->type);
}
}
}
}
<?php
$form = new Form();
$form->addText(..);
$form->addSubmit(..);
BS3FormRenderer::horizontal($form); // labely vedle inputu 3/9
BS3FormRenderer::horizontal($form,4,9); // labely vedle inputu, 4/8 - víc místa pro labely
BS3FormRenderer::vertical($form); // labely nad inputem
return $form;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment