JQuery Initialization on Listings Pages: Difference between revisions
Jump to navigation
Jump to search
| (9 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
==Listings | ==Listings JQuery handlers== | ||
*<code>$('#listings-container').listings('bindListingsHandlers')</code> | *<code>$('#listings-container').listings('bindListingsHandlers')</code> | ||
*<code>$('#listings-container')</code> targets the element containing the listings. <code>#listings-container</code> is the most common element for this, but any appropriate selector can be specified. | *<code>$('#listings-container')</code> targets the element containing the listings. <code>#listings-container</code> is the most common element for this, but any appropriate selector can be specified. | ||
| Line 44: | Line 44: | ||
====JavaScript/jQuery/AJAX==== | ====JavaScript/jQuery/AJAX==== | ||
===Operations buttons=== | |||
====Markup==== | |||
Sample: | |||
<syntaxhighlight lang="html4strict" enclose="div"> | |||
<td class="centered"> | |||
<div class="listops"><!-- | |||
--><button class="edit-btn" data-id="<?=$so->id?>" data-tid="<?=ShippingOption::SECTION_ID?>" data-op="edit" title="edit shipping option">edit shipping option</button><!-- | |||
--><button class="trash-btn" data-id="<?=$so->id?>" data-tid="<?=ShippingOption::SECTION_ID?>" data-op="delete" title="delete shipping option">delete shipping option</button> | |||
</div> | |||
</td> | |||
</syntaxhighlight> | |||
* Use the <code>button</code> element when the button will trigger a JQuery handler. | |||
* Use the <code>anchor</code> element when the button links to another page. | |||
* Buttons are wrapped in a <code>div</code> container with <code>listops</code> class. | |||
* The <code>class</code> attribute value of the button/anchor determines the icon that is loaded and (optionally) the AJAX handler that is invoked upon clicking the button. | |||
* Required attributes for AJAX handlers: | |||
** <code>data-id</code> | |||
** <code>data-tid</code> | |||
=== Inline edits === | |||
==== Markup ==== | |||
* Element to be edited is placed in a container with class <code>inline-edit-cell</code>. | |||
* Pre-existing templates located in <code>[COMMON_TEMPLATE_DIR]forms/ajax/</code>. | |||
** <code>access_cell.php</code> | |||
** <code>date_cell.php</code> | |||
** <code>name_cell.php</code> | |||
** <code>page_cell.php</code> | |||
** <code>slot_cell.php</code> '''<<< deprecated''' Use <code>$.resort('bindResort')</code> instead. (<<< add link to documentation) | |||
** <code>status_cell.php</code> | |||
<syntaxhighlight lang="php"> | |||
<td><? include (COMMON_TEMPLATE_DIR."forms/ajax/name_cell.php"); ?></td> | |||
<? /* or */ ?> | |||
<div><? include (COMMON_TEMPLATE_DIR."forms/ajax/name_cell.php"); ?></div> | |||
</syntaxhighlight> | |||
==== PHP ==== | |||
* The content include file expects an object containing the properties of the field. | |||
* Create an object that contains the field properties within the listings loop: | |||
<syntaxhighlight lang="php" highlight="3"> | |||
while ($row = mysql_fetch_object($rs)) | |||
{ | |||
$name = (object)array("id"=>$row->id, "table"=>"package", "value"=>$row->code); | |||
/* listings template including inline edit content includes goes here */ | |||
} | |||
</syntaxhighlight> | |||
==== JavaScript/jQuery/AJAX ==== | |||
* Both <code>$.listings('bindListingsHandlers')</code> and <code>$.galleries('bindAlbumListingsHandlers')</code> bind the dblclick handlers for the cell: | |||
<syntaxhighlight lang="javascript"> | |||
$('.inline-edit-cell').on('dblclick', methods.editCell); | |||
</syntaxhighlight> | |||
* <code>$.listings('editCell')</code> contains the logic that loads the editable input into the cell after double-clicking the cell. | |||
==== Customized inline elements ==== | |||
* Create include files for the flattened cell and the editing form. | |||
** The class will be `inline-edit-cell` | |||
** Add the following attributes: `data-id`, `data-t`, and `data-op`. | |||
<syntaxhighlight lang="html4strict"> | |||
<div class="inline-edit-cell" data-id="<?=$name->id?>" data-t="<?=$name->table?>" data-op="name"><?=$name->value?></div> | |||
</syntaxhighlight> | |||
==Keywords JQuery handlers== | ==Keywords JQuery handlers== | ||
| Line 57: | Line 123: | ||
* See also [[Keywords]] | * See also [[Keywords]] | ||
==Keyword filter autocomplete== | == Keyword filter autocomplete == | ||
*<code>$(selector). | === Markup === | ||
* Assign keydown handler to '''keyword''' filter textbox, e.g. <code>$('input[name=flkw]').listings('keywordAutocomplete')</code>. | |||
* '''Keyword''' input textbox has attribute <code>data-tid</code> with the content type id for the section as its value. | |||
=== JavaScript/jQuery === | |||
* <code>$(selector).listings('keywordAutocomplete')</code> | |||
=== PHP === | |||
* AJAX handler: <code>/_ajax/utils/keyword_autocomplete.php</code> | |||
** <code>cache_class::set_filters()</code> | |||
** <code>$filters->search_titles()</code> | |||
*** This routine must be defined for the particular content type being filtered. | |||
*** The base routine <code>album_filters_class->search_titles()</code> routine won’t work with the table structure. | |||
=== Examples === | |||
* littledamien.com | |||
** Sketchbooks | |||
** Movies | |||
==Datepicker== | ==Datepicker== | ||
| Line 68: | Line 151: | ||
==See Also== | ==See Also== | ||
*[[Sorting Listings|configuration notes for sorting]] | * [[Binding JQuery Handlers]] | ||
*[[Refactoring a CMS to Use Shared LITTLED Libraries#Listings_pages|Refactoring a CMS to Use Shared LITTLED Libraries]] | * [[Sorting Listings|configuration notes for sorting]] | ||
*[[Keywords]] | * [[Refactoring a CMS to Use Shared LITTLED Libraries#Listings_pages|Refactoring a CMS to Use Shared LITTLED Libraries]] | ||
* [[Keywords]] | |||
[[Category:CMS Documentation]] | [[Category:CMS Documentation]] | ||
[[Category:Littled Libraries]] | |||
[[Category:JQuery/AJAX]] | [[Category:JQuery/AJAX]] | ||
Latest revision as of 13:46, 11 September 2014
Listings JQuery handlers[edit]
$('#listings-container').listings('bindListingsHandlers')$('#listings-container')targets the element containing the listings.#listings-containeris the most common element for this, but any appropriate selector can be specified.- Inline edits:
.inline-edit-celldouble-click - Pagination & paging button handlers (
.page-btn) - Update cache:
.update-cache-btnclick - Delete records:
.trash-btnclick - Makes button icons for the following elements:
.details-btn,.preview-btn,.edit-btn,.print-btn,.update-cache-btn,.trash-btn. - Button element handlers should persist after listings content is refreshed.
$.listings('bindListingsHandlers')in turn calles$.listings('bindListingsButtons'). The two routines are separated so$.listings('bindListingsHandlers')doesn't need to be called multiple times to avoid attaching duplicate handlers to listings elements.- This routine does not refresh the handlers or buttons after the listings are refreshed. This can be achieved with
$(document).ready(function() {
$('#listings-container').listings('bindListingsHandlers');
LITTLED.init({setSortables: function() {
$('#listings-container').listings('bindListingsButtons');
}
});
});
Pagination[edit]
Content CMS[edit]
- Specify a listings handler script with the "listings uri" setting.
- Default handler is
/hostmgr/_ajax/utils/listings.php- Default handler requires that the content and filters objects for that type of content have been defined within the local
cache_class.
- Default handler requires that the content and filters objects for that type of content have been defined within the local
HTML[edit]
<table id="listings-table" data-tid="<?=$filters->site_section->id->value?>" data-p="<?=$filters->calc_rec_position()?>">
- The listings container is a table.
- Attributes of
tableelement:iddefault value#listings-table. Used as jQuery selector for paging functionality.data-tidcontent type contained within table. Used to retrieve paging content.data-pIndex of the first record on the page. E.g. on the 2nd page with 50 records per page the value would be 51.
PHP[edit]
include (COMMON_TEMPLATE_DIR."framework/navigation/listings_page_links.php");
- This include is placed outside the
table id="listings-table"element and inside thediv id="listings-container"element. - Upldate local
cache_classto support the content type. See Adding Content Types to the Local Cache Class
JavaScript/jQuery/AJAX[edit]
Operations buttons[edit]
Markup[edit]
Sample:
<td class="centered"> <div class="listops"><!-- --><button class="edit-btn" data-id="<?=$so->id?>" data-tid="<?=ShippingOption::SECTION_ID?>" data-op="edit" title="edit shipping option">edit shipping option</button><!-- --><button class="trash-btn" data-id="<?=$so->id?>" data-tid="<?=ShippingOption::SECTION_ID?>" data-op="delete" title="delete shipping option">delete shipping option</button> </div> </td>
- Use the
buttonelement when the button will trigger a JQuery handler. - Use the
anchorelement when the button links to another page. - Buttons are wrapped in a
divcontainer withlistopsclass. - The
classattribute value of the button/anchor determines the icon that is loaded and (optionally) the AJAX handler that is invoked upon clicking the button. - Required attributes for AJAX handlers:
data-iddata-tid
Inline edits[edit]
Markup[edit]
- Element to be edited is placed in a container with class
inline-edit-cell. - Pre-existing templates located in
[COMMON_TEMPLATE_DIR]forms/ajax/.access_cell.phpdate_cell.phpname_cell.phppage_cell.phpslot_cell.php<<< deprecated Use$.resort('bindResort')instead. (<<< add link to documentation)status_cell.php
<td><? include (COMMON_TEMPLATE_DIR."forms/ajax/name_cell.php"); ?></td> <? /* or */ ?> <div><? include (COMMON_TEMPLATE_DIR."forms/ajax/name_cell.php"); ?></div>
PHP[edit]
- The content include file expects an object containing the properties of the field.
- Create an object that contains the field properties within the listings loop:
while ($row = mysql_fetch_object($rs))
{
$name = (object)array("id"=>$row->id, "table"=>"package", "value"=>$row->code);
/* listings template including inline edit content includes goes here */
}
JavaScript/jQuery/AJAX[edit]
- Both
$.listings('bindListingsHandlers')and$.galleries('bindAlbumListingsHandlers')bind the dblclick handlers for the cell:
$('.inline-edit-cell').on('dblclick', methods.editCell);
$.listings('editCell')contains the logic that loads the editable input into the cell after double-clicking the cell.
Customized inline elements[edit]
- Create include files for the flattened cell and the editing form.
- The class will be
inline-edit-cell - Add the following attributes:
data-id,data-t, anddata-op.
- The class will be
<div class="inline-edit-cell" data-id="<?=$name->id?>" data-t="<?=$name->table?>" data-op="name"><?=$name->value?></div>
Keywords JQuery handlers[edit]
$('#listings-container').keywords('bindListingsHandlers')targets the element containing the listings. It's the most common element to use in this case, but any appropriate selector may be used.#listings-container- Loading inline editor:
.edit-kw-btnclick - Submitting and canceling inline edits:
.kw-commit-btnand.kw-cancel-btnclick - Button icons:
.ui-icon-edit $.keywords('bindListingsHandlers')in turn calles$.keywords('bindListingsButtons'). The two routines are separated so$.keywords('bindListingsHandlers')doesn't need to be called multiple times to avoid attaching duplicate handlers to listings elements.- Button element handlers should persist after listings content is refreshed.
- The routine doesn't handle refreshing the button elements when the listings content is refreshed.
- See also Keywords
Keyword filter autocomplete[edit]
Markup[edit]
- Assign keydown handler to keyword filter textbox, e.g.
$('input[name=flkw]').listings('keywordAutocomplete'). - Keyword input textbox has attribute
data-tidwith the content type id for the section as its value.
JavaScript/jQuery[edit]
$(selector).listings('keywordAutocomplete')
PHP[edit]
- AJAX handler:
/_ajax/utils/keyword_autocomplete.phpcache_class::set_filters()$filters->search_titles()- This routine must be defined for the particular content type being filtered.
- The base routine
album_filters_class->search_titles()routine won’t work with the table structure.
Examples[edit]
- littledamien.com
- Sketchbooks
- Movies
Datepicker[edit]
$('.datepicker').datepicker();