Skip to content

Instantly share code, notes, and snippets.

@Abhoryo
Created May 26, 2012 09:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Abhoryo/2793035 to your computer and use it in GitHub Desktop.
Save Abhoryo/2793035 to your computer and use it in GitHub Desktop.
Twig exemple for https://github.com/pulse00/Twig-Eclipse-Plugin/issues/58 (From SorienDataGridBundle)
{# ------------------------------------------------------ grid ------------------------------------------------------ #}
{% block grid %}
<div class="grid">
{% if grid.totalCount > 0 or grid.isFiltered or grid.noDataMessage is sameas(false) %}
<form id="{{ grid.hash }}" action="{{ grid.routeUrl }}" method="post">
{% if grid.massActions|length > 0 %}
{{ grid_actions(grid) }}
{% endif %}
<table>
{% if grid.isTitleSectionVisible %}
{{ grid_titles(grid) }}
{% endif %}
{% if grid.isFilterSectionVisible %}
{{ block('grid_scripts_operator') }}
{{ grid_filters(grid) }}
{% endif %}
{{ grid_rows(grid) }}
</table>
{% if grid.isPagerSectionVisible %}
{{ grid_pager(grid) }}
{% endif %}
</form>
{% else %}
{{ grid_no_data(grid) }}
{% endif %}
</div>
{% endblock grid %}
{# --------------------------------------------------- grid_no_data ------------------------------------------------- #}
{% block grid_no_data %}<p class="no_data">{{ grid.noDataMessage|default('No data')|trans|raw }}</p>{% endblock grid_no_data %}
{# --------------------------------------------------- grid_titles -------------------------------------------------- #}
{% block grid_titles %}
<tr class="grid-row-titles">
{% for column in grid.columns %}
{% if (column.visible )%}
<th class="{% if column.align != 'left'%} align-{{column.align}}{% endif %}{% if loop.last %} last-column{% endif %}"{% if(column.size > -1) %} style="width:{{column.size}}px"{% endif %}>
{% set columnTitle = grid.prefixTitle ~ column.title %}
{% if (column.sortable) %}
<a href="{{ grid_url('order', grid, column) }}" title="{{ 'Order by'|trans }} {{ columnTitle|trans }}">{{ columnTitle|trans }}</a>
{% if column.order == 'asc' %}
<div class="sort_up"></div>
{% elseif column.order == 'desc' %}
<div class="sort_down"></div>
{% endif %}
{% else %}
{{ columnTitle|trans }}
{% endif %}
</th>
{% endif %}
{% endfor %}
</tr>
{% endblock grid_titles %}
{# -------------------------------------------------- grid_filters -------------------------------------------------- #}
{% block grid_filters %}
<tr class="grid-row-filters">
{% for column in grid.columns %}
{% if (column.visible)%}
<th{% if loop.last %} class="last-column"{% endif %}>{% if column.filterable %}{{ grid_filter(column, grid)|raw }}{% endif %}</th>
{% endif %}
{% endfor %}
</tr>
{% endblock grid_filters %}
{# ---------------------------------------------------- grid_rows --------------------------------------------------- #}
{% block grid_rows %}
{% for row in grid.rows %}
{% set last_row = loop.last %}
{% spaceless %}
<tr{% if row.color != '' %} style="background-color:{{row.color}};"{% endif %} class="grid-row-cells {{ cycle(['odd', 'even'], loop.index) }}">
{% for column in grid.columns %}
{% if (column.visible )%}
<td class="grid-column-{{ column.id }}{% if column.align != 'left'%} align-{{column.align}}{% endif %}{% if loop.last %} last-column{% endif %}{% if last_row %} last-row{% endif %}">{{ grid_cell(column, row, grid)|raw }}</td>
{% endif %}
{% endfor %}
{% endspaceless %}
</tr>
{% else %}
{% set nbColumns = 0 %}
{% for column in grid.columns %}
{% if (column.visible )%}
{% set nbColumns = nbColumns + 1 %}
{% endif %}
{% endfor %}
<tr class="grid-row-cells">
<td class="last-column last-row" colspan="{{ nbColumns }}" style="text-align: center;">{{ grid_no_result(grid) }}</td>
</tr>
{% endfor %}
{% endblock grid_rows %}
{# --------------------------------------------------- grid_no_result ------------------------------------------------- #}
{% block grid_no_result %}{{ grid.noResultMessage|default('No result')|trans|raw }}{% endblock grid_no_result %}
{# ---------------------------------------------------- grid_pager -------------------------------------------------- #}
{% block grid_pager %}
<div class="pager">
{{ 'Page'|trans }}
{% spaceless %}
<input type="button" class="prev" {% if grid.page <= 0 %}disabled="disabled"{% endif %} value="<" onclick="window.location.href='{{grid_url('page', grid, grid.page-1)}}';"/>
<input type="text" value="{{grid.page+1}}" size="2" onkeypress="if (event.which == 13) { window.location.href='{{grid_url('page', grid)}}'+(parseInt(this.value)-1); return false; }"/>
<input type="button" value=">" class="next" {% if grid.page >= grid.pagecount-1 %}disabled="disabled"{% endif %} onclick="window.location.href='{{grid_url('page', grid, grid.page+1)}}';"/> {{ 'of %count%'|trans({'%count%': grid.pagecount}) }}
{% endspaceless %}
{{ ', Display'|trans }}
<select onchange="window.location.href='{{grid_url('limit', grid)}}'+this.value">
{% for key, value in grid.limits %}
{% if key == grid.currentlimit %}
<option value="{{key}}" selected="selected">{{value}}</option>
{% else %}
<option value="{{key}}">{{value}}</option>
{% endif %}
{% endfor %}
</select> {{ 'Items per page'|trans }}
</div>
{% endblock grid_pager %}
{# --------------------------------------------------- grid_actions ------------------------------------------------- #}
{% block grid_actions %}
<div class="mass-actions">
<a href="#" onclick="return {{grid.hash}}_mark_visible(true);">{{ 'Select visible'|trans }}</a> |
<a href="#" onclick="return {{grid.hash}}_mark_visible(false);">{{ 'Deselect visible'|trans }}</a> |
<a href="#" onclick="return {{grid.hash}}_mark_all(true);">{{ 'Select all'|trans }}</a> |
<a href="#" onclick="return {{grid.hash}}_mark_all(false);">{{ 'Deselect all'|trans }}</a>
<span class="mass-actions-selected" id="{{grid.hash}}_mass_action_selected"></span>
{% spaceless %}
<div style="float:right">
{{ 'Action'|trans }}
<input type="hidden" id="{{grid.hash}}_mass_action_all" name="{{grid.hash}}[{{ constant('Sorien\\DataGridBundle\\Grid\\Grid::REQUEST_QUERY_MASS_ACTION_ALL_KEYS_SELECTED') }}]" value="0"/>
<select name="{{grid.hash}}[{{ constant('Sorien\\DataGridBundle\\Grid\\Grid::REQUEST_QUERY_MASS_ACTION') }}]">
<option value="-1"></option>
{% for key, value in grid.massActions %}
<option value="{{key}}">{{ value.title|trans }}</option>
{% endfor %}
</select>
<input type="submit" value="{{ 'Submit Action'|trans }}"/>
</div>
{% endspaceless %}
{{ block('grid_scripts') }}
</div>
{% endblock grid_actions %}
{# ------------------------------------------------ grid_action_columns --------------------------------------------- #}
{% block grid_column_actions_cell %}
{% for action in column.rowActions %}
<a href="{{ url(action.route, column.routeParameters(row, action), false) }}" target="{{ action.target }}"{% if action.confirm %} onclick="return confirm('{{ action.confirmMessage }}')"{% endif %}{% for name, value in action.attributes %} {{ name }}="{{ value }}" {% endfor %}>{{ action.title|trans }}</a>
{% endfor %}
{% endblock grid_column_actions_cell %}
{# ------------------------------------------------ grid_array_columns --------------------------------------------- #}
{% block grid_column_array_cell %}
{% for index in value -%}
{{ index|raw }}{{ column.separator|raw }}
{%- endfor %}
{% endblock grid_column_array_cell %}
{# --------------------------------------------------- grid_scripts ------------------------------------------------- #}
{% block grid_scripts %}
<script type="text/javascript">
function {{ grid.hash }}_mark_visible(select)
{
var form = document.getElementById('{{ grid.hash }}');
var counter = 0;
for (var i=0; i < form.elements.length; i++ ) {
if (form.elements[i].type == 'checkbox') {
form.elements[i].checked = select;
if (form.elements[i].checked){
counter++;
}
}
}
{% if grid.isFilterSectionVisible %}
counter--;
{% endif %}
var selected = document.getElementById('{{ grid.hash }}_mass_action_selected');
selected.innerHTML = counter > 0 ? '{{ 'Selected _s_ rows'|trans }}'.replace('_s_', counter) : '';
document.getElementById('{{ grid.hash }}_mass_action_all').value = '0';
return false;
}
function {{ grid.hash }}_mark_all(select)
{
var form = document.getElementById('{{ grid.hash }}');
for (var i=0; i < form.elements.length; i++ ) {
if (form.elements[i].type == 'checkbox') {
form.elements[i].checked = select;
}
}
var selected = document.getElementById('{{ grid.hash }}_mass_action_selected');
if (select) {
document.getElementById('{{ grid.hash }}_mass_action_all').value = '1';
selected.innerHTML = '{{ 'Selected _s_ rows'|trans }}'.replace('_s_', '{{ grid.totalCount }}');
} else {
document.getElementById('{{ grid.hash }}_mass_action_all').value = '0';
selected.innerHTML = '';
}
return false;
}
</script>
{% endblock grid_scripts %}
{# ------------------------------------------- grid_scripts_operator ------------------------------------------------- #}
{% block grid_scripts_operator %}
<script type="text/javascript">
function switchOperator(elt, query_to_id)
{
if (elt.options[elt.selectedIndex].value == '{{ constant('Sorien\\DataGridBundle\\Grid\\Column\\Column::OPERATOR_BTW') }}') {
document.getElementById(query_to_id).style.display = '';
document.getElementById(query_to_id).disabled=false;
} else {
document.getElementById(query_to_id).style.display = 'none';
document.getElementById(query_to_id).disabled=true;
}
}
</script>
{% endblock grid_scripts_operator %}
{# -------------------------------------------- grid_column_operator --------------------------------------- #}
{% block grid_column_operator %}
{% if column.operatorsVisible %}
<span class="grid-filter-operator">
<select name="{{hash}}[{{column.id}}][operator]" onchange="switchOperator(this, '{{hash}}__{{column.id}}__query__to');">
{% for operator in column.operators %}
<option value="{{ operator }}"{% if op == operator %} selected="selected"{% endif %}>{{ operator |trans }}</option>
{% endfor %}
</select>
</span>
{% endif %}
{% endblock grid_column_operator %}
{# -------------------------------------------- grid_column_filter_type_text --------------------------------------- #}
{% block grid_column_filter_type_text %}
{% set op = column.data.operator is defined ? column.data.operator : column.defaultOperator %}
{% set from = column.data.query.from is defined ? column.data.query.from : null %}
{% set to = column.data.query.to is defined ? column.data.query.to : null %}
{% set btwOperator = constant('Sorien\\DataGridBundle\\Grid\\Column\\Column::OPERATOR_BTW') %}
<span class="grid-filter-text">
{{ block('grid_column_operator')}}
<span class="grid-filter-text-query">
<input type="text" value="{{ from }}" class="grid-filter-text-query-from" name="{{hash}}[{{column.id}}][query][from]" id="{{hash}}__{{column.id}}__query__from" onkeypress="if (event.which == 13){this.form.submit();}" />
<input type="text" value="{{ to }}" class="grid-filter-text-query-to" name="{{hash}}[{{column.id}}][query][to]" id="{{hash}}__{{column.id}}__query__to" onkeypress="if (event.which == 13){this.form.submit();}" {{ ( op == btwOperator ) ? '': 'style="display: none;" disabled="disabled"' }} />
</span>
</span>
{% endblock grid_column_filter_type_text %}
{# -------------------------------------------- grid_column_filter_type_select --------------------------------------- #}
{% block grid_column_filter_type_select %}
{% set op = column.data.operator is defined ? column.data.operator : column.defaultOperator %}
{% set from = column.data.query.from is defined ? column.data.query.from : null %}
{% set to = column.data.query.to is defined ? column.data.query.to : null %}
{% set btwOperator = constant('Sorien\\DataGridBundle\\Grid\\Filter\\Filter::OPERATOR_BTW') %}
<span class="grid-filter-select">
{{ block('grid_column_operator')}}
<span class="grid-filter-select-query">
<select name="{{hash}}[{{column.id}}][query][from]" class="grid-filter-select-query-from" id="{{hash}}__{{column.id}}__query__from" onchange="this.form.submit();">
<option value="">&nbsp;</option>
{% for key, value in column.values %}
<option value="{{key}}"{% if not from is null and from == key %} selected="selected"{% endif %}>{{ value }}</option>
{% endfor %}
</select>
<select name="{{hash}}[{{column.id}}][query][to]" class="grid-filter-select-query-to" id="{{hash}}__{{column.id}}__query__to" onchange="this.form.submit();" {{ ( op == btwOperator ) ? '': 'style="display: none;" disabled="disabled"' }}>
<option value="">&nbsp;</option>
{% for key, value in column.values %}
<option value="{{key}}"{% if not to is null and to == key %} selected="selected"{% endif %}>{{ value }}</option>
{% endfor %}
</select>
</span>
{% endblock grid_column_filter_type_select %}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment