abridge() method, 532
access control list (ACL) system, xxii, 57, 87, 134, 232, 256–257, 306–307, 337, 378, 385
access() method, 529
access.xml file, 232, 234, 257, 307, 313–314, 352
addItem() method, 304
addToolbar() method, 266, 275, 315, 334, 454
admin() method, 531
Aggregate functions, 425–426, 436
AJAX (asynchronous JavaScript and XML), 2, 443–444, 453, 467, 469–471, 473, 535
allowEdit() method, 331, 333, 377–378
ALNUM filter type, 523
ALTER TABLE command, 407, 413, 534
Alternative Menu Item, 127, 533, 536
alternative syntax, 100, 499, 507
Apache web server, xxi, 1–3, 17–21, 55, 62, 84, 294, 533, 535, 537
appendButton() method, 396
application programming interface (API), xxiii, 117, 119, 245, 445, 533–534, 537
application.php file, 46, 53, 68–69, 82, 142, 516
Aptana Studio Pro, 37
array_keys() method, 401
Article Manager component, 52, 108, 125, 231, 423, 455, 457–458
ASC. See sort by ascending under databases
Associative array, 70, 79, 147, 161, 163, 165, 182–183, 204, 242, 246, 260–261, 277–278, 281, 297–299, 303, 319, 367, 440–441, 465, 501, 505, 508–509, 528
Asynchronous JavaScript and XML. See AJAX
Asynchronous requests, 467, 469
Atom 1.0 format, 303
ATOM XML feed, 56
Atomic template, 49, 93, 96–99, 103–104
Authentication, 50, 141, 145–146, 149, 153, 476
authorise() method, 70, 256–257, 520
Authorized user, 531
AuthorisedViewLevels() method, 362
AUTO_INCREMENT attribute, 324–325, 408–409, 411–413, 417, 428, 431
BASE64 filter type, 523
Batch operations, 529
Beez20 template, 49, 92, 100, 102, 105–108, 110–111, 121, 123, 125–126, 130–132, 137, 165, 173, 464, 467
bind() method, 259–261, 276, 280, 293, 381
Black list filtering, 524
Blueprint CSS framework, 94–95
Boolean values, 145, 152, 175, 181, 271, 336–337, 387, 533
BOOLEAN filter type, 523
boolean() method, 530
bootstrap.php file, 477–481, 484
build() method, 68, 293, 300–302, 537
Cascading style sheets (CSS), xx, xxi, 1–3, 16, 21, 47, 50, 57, 92, 94–95, 102, 105, 191, 197, 202, 272, 327, 449, 454, 528, 534
Catch block, 72, 277–278, 280, 485
Category id, 257, 292, 295–300, 302–303, 306, 332–333, 340, 360, 363, 368, 370–371, 377, 399, 411, 421, 458
check() method, 259, 261–262, 348
check_categories parameter, 155
checkEditId() method, 239
checkedOut() method, 531
checkIn() method, 377
Child categories, 158–159, 303, 466
Choose Layout, 364
Classes, 26, 87–89, 144, 184, 192, 202, 220, 259, 309, 312, 317, 346, 396, 451, 512–513, 516, 521, 528, 533
class declarations, 65–66, 140, 183, 191, 480, 513
class methods, 33, 513, 516–517, 533
cloak() method, 530
close() method, 400–401, 456, 470
Columns, 270, 309, 406, 412, 533
names, 194, 209, 210, 261, 420, 427, 429, 434, 437, 441
comma-delimited list, 206, 211, 437
Command-line-interface (CLI) applications, 43, 477, 479, 481–482, 497, 534
comma-separated values (CSV), 206, 395–397, 400–402
Components, xix, 5, 10, 11, 14, 16, 42–44, 47, 50–51, 63, 70, 73–75, 84–85, 92–93, 98, 121, 123, 125–127, 129, 137, 141, 177, 180, 187–188, 204, 215, 227, 229–262, 263–304, 305–353, 355–403, 446, 448–449, 452, 454–457, 460, 471–472, 513, 528, 533–537
check all boxes, 270
com_categories, 52, 155, 233, 293, 306, 318–329, 352
com_content component, 10, 43–44, 52, 70, 74, 85, 92, 156, 187, 204–205, 214–215, 229, 360, 446, 456–458, 513, 533
com_users component, 43, 52, 121, 123–124, 126–127, 137, 165, 176, 177, 181, 452, 454, 533
com_weblinks, 43, 52, 156, 231, 233–234, 236–241, 249, 256, 257, 263–264, 267–268, 275–277, 283, 287–288, 290–293, 296–298, 300–301, 303, 308, 311, 326
Featured Articles Blog menu item, 10
finding category paths from menu items, 300–302
front-end news feed view, 303–304
housekeeping, 268
installation files, 233
JController display() method, 265
menu items, 6, 10, 81, 88, 126, 129, 229–230, 233, 290–294, 296–299, 360, 533
model publish() method, 253–258
model-view-controller (MVC) design pattern, 230–231, 288–290
modifying forms dynamically, 281–282
naming conventions in, 252–253
options (parameters), 234
other model methods, 259
pagination controls in, 274
parameter fields element, 292–293
request fields element, 291–292
review of controllers in components, 251–252
saving JForm Object in memory, 280–281
sortable column headings, 270–271
views and the display() method, 263
config.xml file, 232, 234, 307, 312, 316, 352, 360
configuration.php file, 41, 46, 55, 67–68, 86–87, 482–485, 496–497
Constructor methods, 154, 241–243, 249–252, 258, 260, 273, 320–321, 347, 367, 370, 397, 435, 486–487, 489, 495, 515
Container style, 104
Content management system (CMS), 15–16, 38–39, 47, 56, 63, 66, 83, 294, 405, 445, 475–476, 483, 489, 497, 513, 525
ContentHelperRoute, 204–205, 213–214, 465
Controllers, 231–232, 237–241, 249, 251–253, 288, 309–311, 331, 357, 376, 385, 396, 400, 534, 536
controller.php file, 232, 236–239, 249, 263, 265, 288–289, 307, 309, 352, 355–357, 468
COUNT() function, 425–426, 436
countItemsInCategory() method, 158
countItemsInChildren() method, 158
Create Read Update Delete (CRUD), 230
Create Table, 416
CREATE TABLE command, 324–325, 407, 409–410, 413, 417–418, 534
csvReport() method, 396
Curly braces, 24, 72, 99, 100, 103, 130, 500–501
custom() method, 396
Data definition language (DDL) commands, 406–409, 411, 413–414, 416, 418, 534, 537
Data manipulation language (DML) commands, 406–407, 418–419, 421, 423, 425, 427, 537
#__ prefix, 86–87, 150, 194, 207, 210, 323–325, 405, 408–409, 418
a.*
syntax, 208–209, 322–323, 367, 420
aggregate functions, 425–426, 436
and JDatabaseQuery objects, 432–434
AUTO_INCREMENT attribute, 408, 409, 412
backing up a database, 418–419
CHAR data type, 411
creating and modifying tables with data definition language (DDL) commands, 407–414
data definition language (DDL) scripts, 416–417
data manipulation language (DML) commands and, 419–429
debugging SQL queries, 414–416
DECIMAL data type, 412
DEFAULT attribute, 413
designing table structures, 429–432
DOUBLE data type, 412
DROP TABLE command, 414
duplicate indexes, 428
duplicate keys, 428
expressions in queries, 429
FLOAT data type, 412
foreign keys, 409–410, 413, 421–422, 430–431
GROUP BY queries, 425–426, 436
INSERT queries, 427–428, 436–439
INTEGER data type, 411
key fields, 430
list of Joomla! database tables, 87–89
MEDIUMTEXT data type, 412
NOT NULL attribute, 412
ORDER BY queries, 424
protecting against hackers, 434–435
queries, 149, 152, 157–158, 324, 488, 490, 492, 494, 534
returning query results, 440–442
SELECT queries, 419–426, 433–434, 439–442
sort by ascending, 200–201, 213, 369–370, 399, 424, 432, 434
sort by descending, 101, 127, 180, 181, 192, 194, 200–202, 217–221, 292, 312–313, 344–346, 349–350, 359, 369–370, 373, 380, 382, 424, 426, 434, 446, 450, 456
TEXT data type, 412
TINYINT data type, 411
UNSIGNED attribute, 413
UPDATE queries, 426–427, 432–439
VARCHAR data type, 411
working inside Joomla!, 432–442
Date and time, 68, 211, 406, 411, 424, 429, 489, 491
DATETIME data type, 408–409, 411–413
Debug Language feature, 135, 181
Debug System feature, 135, 416
Debugging, 21, 28–30, 34, 36–37, 113, 518
DECIMAL data type, 412
def() method, 155
DEFAULT, 127, 324–325, 349–350, 359, 364, 393, 408, 410, 412–414, 417
default_items.php file, 372, 465
defines.php file, 46, 53, 64–65
dirname() function, 478–479, 510
Discover feature, 106–107, 163, 170–171, 178, 185, 353
dispatch() method, 70, 76, 142, 519
display() method, 237, 239, 243, 249–250, 263–267, 269, 271, 273, 275, 303–304, 311, 315, 319, 334, 358, 361–364, 378–380, 518, 521, 536
doEndSubscription() method, 488
doEndSubscriptions() method, 491
doExecute() method, 481–482, 487
DROP TABLE command, 326, 407, 414
Eclipse, 17, 21–30, 34, 36–38, 40, 249–250, 518, 534, 535
edit() method, 238–239, 250–251, 253, 331, 376–377, 380
edit_params.php file, 282, 286
editList() method, 396
Editors-XTD plugins, 141
elseif statements, 158, 273, 363, 365, 503–504
Errors
conditions, 15, 47, 277–278, 439, 496
reporting, 132
highlighting, 37
Exceptions, 71, 277–280, 485, 494
execute() method, 237–238, 241, 246, 264, 480–482, 485, 487, 521
executeComponent() method, 75
exit() method, 56
Exporting files, 400, 418–419, 427
exportReport() method, 395–396, 400
Extension Manager, 14, 52, 106, 141, 163, 170–171, 173, 178, 233, 353, 394, 534
Extensions, xx, xxii–xxiv, 5–6, 9, 11–12, 39, 48–51, 53, 57, 66, 83, 87, 89, 100, 106, 138, 141, 155–156, 159, 163, 169–171, 178, 197–198, 215–216, 229, 234, 275, 280, 290, 294–295, 300, 394, 443, 445–467, 472, 534, 536
Joomla! Extensions Directory (JED), xix, 6
See also Components, Languages, Modules
Factory design pattern, 56, 66, 85
fclose() method, 401
fetchTemplate() method, 78
File transfer protocol (FTP), 57
Fonts, 2, 91–92, 472, 481, 534, 537
fopen() method, 401
Foreign keys, 409–410, 413, 421–422, 430–431
Form id, 390
Form validation, 283, 341, 382, 447, 450, 460, 468
Foundational classes and functions, 56
fputcsv() method, 401
Framework classes, 67
framework.php file, 66
Free and open-source software (FOSS), 4, 534
from() method, 194, 207, 433, 436, 438–489
fromObject() method, 401
genericList() method, 531
get() method, 129, 266, 275, 441, 489, 495, 525
getArticleRoute() method, 214–215
getAuthorisedGroups() method, 192, 194
getAuthorisedViewLevels() method, 206, 362, 367
getCategoryRoute() method, 296–297, 300
getDate() method, 86, 206, 347–348, 368, 388, 484–485, 501, 517
getEndedSubscriptions() method, 487–488
getError() method, 239, 247, 253–254, 257–258, 264, 279, 310, 384, 392
getForm() method, 259, 275–276, 281, 336, 338, 379
getHead() method, 515
getHeadData() method, 160, 163
getHeaderData() method, 161
getInput() method, 284, 286, 343, 448, 456–457
getInstance() method, 69, 143, 237–238, 243, 246, 254, 264, 277, 279, 371, 385, 480, 515–516, 525
getItem() method, 260, 275, 278–279, 290, 293, 336, 340, 379
getItems() method, 266, 275, 299, 319, 366, 396
getLabel() method, 284, 287, 343, 383
getLanguageFilter() method, 212–213
getLayoutPath() method, 191, 204, 215, 226
getList() method, 205
getListQuery() method, 322, 367, 398
getMapRow() method, 388
getModel() method, 243, 246–247, 252, 311, 333, 377–378, 384–385, 517–518
getNullDate() method, 206–207, 368
getPagination() method, 266, 274–275, 319, 366–367
getPath() method, 297–298, 301–302
getState() method, 266, 275, 336, 366–367, 379
getString() method, 156, 370, 525
getSubscription() method, 491, 493
getTable() method, 253–254, 337, 511
getUserStateFromRequest() method, 370
GIT, 38
Global Configuration, 52, 55, 132, 134–135, 145, 181, 206, 215, 304, 416, 447, 460, 532
gmdate() method, 489
GNU General Public License, 55
grandparent, 295–296, 516, 518
Greenwich Mean Time (GMT), 68, 489, 496
GROUP BY, 420, 425–426, 433, 436
groupedList() method, 531
header() method, 400
Helper class, 65, 190–192, 203, 311, 318
Helper methods, 234, 245, 287, 396
helper.php file, 53, 72, 182, 188–190, 199, 203–204
History table, 429
HTML (hypertext markup language)
anchor element, 197, 241, 272, 296, 454, 457, 458, 462, 528
border attribute, 104–105, 114, 131–134
fieldset element, 101–103, 124, 127, 129, 135–136, 162, 165–166, 175, 180, 189, 199–202, 220, 234, 277, 283–287, 291–293, 312–313, 326–327, 342–344, 346, 359–360, 373–374, 379–380, 382–383, 456
h1 element, 12, 96, 98, 111, 119–120, 122–123, 372, 391, 394, 465
HTML DOCTYPE declaration, 95
html folder, 92, 116, 125, 528
htmlspecialchars() function, 191, 273, 363, 534
img tag, 113–114, 233, 351–352, 372, 448, 467, 528
input element, 165, 175, 202, 449–450
list (li) element, 111–115, 119, 121, 196–197, 216, 283–287, 342–343, 461–466, 527
name attribute, 98, 161, 165, 180, 287, 292, 293, 469
option attribute, 127
p element, 115
src attribute, 95, 114, 372, 448, 482, 496–497, 528
table cell (td) element, 130, 271–272, 330
table heading element, 130
title attribute, 127, 448, 463
title element, 95
ul element, 111, 114, 119–121, 196–197, 216, 283–287, 342–343, 461–466
id column, 70, 88, 207, 260, 409, 414, 420, 428, 430
iframe, 447, 454–455, 457–459, 524
import.php file, 66, 85, 478–479, 484
importPlugin() method, 139–140, 182–183
Index syntax, 410
index.html files, 18, 20, 30, 45–46, 55, 93, 110, 122, 161–162, 166, 169–170, 172, 174, 184–185, 188, 199, 232, 352, 355
index.php file, 2, 18, 28, 42, 45–46, 50, 55, 62–68, 70, 76, 78, 81–84, 93–94, 96, 98, 103, 129, 131–133, 215, 233, 236–240, 249, 264, 268, 283, 290, 293, 295–297, 300, 302, 310, 318, 326, 329, 333, 341, 374, 376, 382–386, 391–392, 395–396, 454, 457–458, 461, 466–468, 478, 480–481, 499, 513, 519
initialise() method, 68
INNER JOIN statements, 421–424, 430–431, 433
INSERT command, 407, 418–419, 427, 429, 432, 436–438
installing Joomla!
DocumentRoot folder, 18–20, 477–478
INTEGER data type, 408–409, 411–413, 523–524
Integrated development environment (IDE), 17, 21–23, 26, 30, 36–40, 518, 534, 535–536
Internationalization. See Languages
Introtext, 112–115, 119–120, 527
Invalid column names, 320
Invalid data, 61, 201, 225, 278, 451–452, 496
isDefault() method, 531
isset command, 71, 79, 133–134, 153, 156, 182–183, 203–204, 261, 277, 280, 286, 298–299, 333, 363, 386, 490, 509, 521
item() method, 529
JAdministrator object, 53, 68, 85–86
JArrayHelper, 246–247, 332, 400–401
JApplication, 25, 30, 68–69, 82, 86, 143, 206, 340, 348, 515–516
article selector modal, 455–458
built-in JavaScript features, 446–466
defined, 443
disabling the Submit or Save action, 451–452
how it works, 444
in Joomla!, 446
javascript folder, 92
JavaScript object notation (JSON), 57, 87, 103, 105, 260–261, 293, 324, 412, 470
JS caption, 448
JS colorpicker, 449
JS framework, 452
keepalive behavior, 453
noframes behavior, 459
tooltip behavior, 463
uploader behavior, 466
user configuation modal, 454–455
using AJAX in Joomla!, 467–471
using MooTools extensions, 467
using other JavaScript frameworks, 471–473
JButton, 241
JButtonPopup, 455
JCategories, 297, 367, 370–371
JCli, 479, 480, 485–487, 489, 495
JComponentHelper render() method, 72–74
JController class, 236–238, 241–243, 246, 249–250, 252, 264–265, 289, 304, 308, 310–311, 319, 357–358, 367, 521
JControllerAdmin, 241–243, 245–247, 249–250, 253, 256, 311–312
JControllerForm, 238, 240, 250, 252, 258, 331, 377
JDatabase, 85–86, 149, 193, 195, 205–208, 325, 346, 390, 432–434, 436, 440, 486, 489, 495, 504, 520
JDate, xxiii, 85–86, 207, 515, 517
JDispatcher object type, 139, 143, 254, 279, 385, 486
JDocument, 81, 86, 304, 472, 515–516, 518
JDocumentHTML, 78, 80–81, 86, 160, 265, 304, 514–516
JDocumentJSON, 86
JEXEC constant, 63, 94, 111, 118, 120, 144, 162, 185, 189, 195, 203–204, 216, 220, 223, 236, 283, 308, 310, 312, 314, 317, 319, 326, 331, 334, 336, 341, 346, 357, 361, 366, 371–373, 377, 379, 382, 387, 391, 397, 460, 464–465, 479, 480, 483–484, 510, 513
jexit() function, 56
JFactory class, 26, 56, 66–68, 71, 73, 77–78, 85–86, 94, 146–147, 149, 153, 160, 162, 168, 192, 206–207, 213, 236, 254, 256, 265, 268, 276, 298, 308, 315, 318, 320, 326, 332–333, 335–338, 340, 347–348, 357, 361–362, 364, 367–370, 373, 378–379, 381, 383, 385, 388, 390–391, 400, 432, 435–436, 456, 468, 470–471, 484–485, 488, 490, 495, 500–501, 515, 517, 520, 525
JFeedItem object, 304
JFilterInput, 102, 220, 310, 357, 523–525
JForm classes, xxii, 128, 139, 173–180, 182, 202, 218–220, 223, 225, 232, 259, 263–264, 266, 268, 270, 272, 274–284, 286–290, 292, 294, 296, 298, 300, 302, 304, 307, 338–339, 341, 360, 446–451, 456, 463, 524, 525, 537
JFormFieldCategory, 360
JFormRule class, 220–221, 223–225, 360, 451–452
JFormRuleOptions class, 223–224
JHIDE language key, 180, 293, 359
JHTML, 118, 120–121, 123–124, 175, 268–272, 283, 285–286, 326–330, 341, 343, 372–374, 382–383, 444, 446, 448–450, 452–453, 455, 459–460, 463–465, 468, 471, 527–532
batch folder class, 529
behavior folder class, 529
calendar method, 529
calling JHTML methods, 527
category folder class, 530
content folder class, 530
contentlanguage folder class, 530
custom JHTML classes, 528
date method, 529
email folder class, 530
form folder class, 530
grid folder class, 530
image folder class, 531
image method, 528
jgrid folder class, 531
JHTML class methods, 528
link method, 528
list folder class, 531
script method, 529
select folder class, 531
sliders folder class, 531
stylesheet method, 528
tabs folder class, 532
JHtmlBehavior, 283
JHtmlString class, 116–120, 527
JHtmlWeblinks, 268
JLoader class, 56, 66–67, 117–118, 120–121, 183, 203–204, 310–311, 315, 387, 397, 513–514
JMenuSite, 299
JModel class, 137, 266–276, 336–367
JModelAdmin, 154, 253–254, 257–260, 275–276, 279, 289, 336
JModelForm, 258–259, 276–277, 279
JModelList, 266, 319–320, 322, 366–367
JModuleHelper class, 190–191, 203–204, 215
JObject, 278–279, 318, 387, 469, 516
JOIN clause, 419–423, 426, 430, 433
Joomla!
core distribution, 45, 106, 407
core extensions, 6, 83, 156–157, 233, 407
core modules, 9
developing modules, 9
long-term support (LTS) release, xxii
running locally, 17
standard database, 86
third-party extensions, 6
user interface, 11
version 1.5, xx, xxii–xxiii, 15, 47, 49, 56, 103, 148–149, 193, 445, 475
version 1.6, xx, xxii–xxiii, xxiv, 6, 15, 47, 49, 52–53, 87, 103, 106, 125–126, 141, 149, 173, 193, 198, 213, 218, 226, 248, 256, 278–279, 432, 445
version 1.7, xx, xxii, 86, 323, 497
version 2.5, xix–xx, xxii, xxiv, 4, 9, 19, 42, 47–49, 52–53, 56, 66, 137, 141, 144, 148–149, 168, 187, 193, 247, 294, 421–422, 432, 446, 449, 525, 537
version 2.5.2, 4
Joomla! as a platform, 475–497
platform example programs, 477–482
project structure, 482
running the monitoring file, 496
setting up a platform project, 477–478
subscription monitoring example, 482–496
choosing an extension type, 14–15
controlling and checking commands, 60–61
design decisions that affect developing, xx
developer site, 128
for the experienced Joomla! user, xix
for the experienced web programmer, xix
platform packages, 57
prerequisite knowledge, 3
techinical requirements, 17–21
using Joomla! as a framework, 15–16
using Joomla! as a platform, 15–16, 56
web programming vs. normal programming 58–60
Joomla! documentation, 19, 22, 30, 39, 75, 125
Joomla! execution cycle, 61–84
checking the execution environment, 62–63
defining file locations, 64–66
executing the component, 70–76
loading the index.php file, 62
starting or continuing the session, 6–98
Joomla! Extensions Directory (JED), xix, 6
Joomla! folder structure
administrator folder index.php file, 55
administrator/cache folder, 51
administrator/components folder, 51
administrator/help folder, 51
administrator/includes folder, 51
administrator/language folder, 51
administrator/manifests folder, 53
administrator/modules folder, 53–54
administrator/templates folder, 54
cli folder, 43
files in top-level folders, 55
front-end vs. back-end folders, 42
images folder, 45
includes folder, 46
index.html files and, 45
index.php files and, 62
installation folder, 46
language folder, 47
libraries folder, 47
logs folder, 47
modules folder, 48
plugin folder, 48
tmp folder, 50
Joomla! platform project, 15
Joomla! specific links, 294–295, 298, 409
JPagination, 274
JPATH_BASE constant, 64–66, 73–74, 167, 176, 479–480, 484, 510, 519
JPATH_COMPONENT, 73–74, 263, 268, 283, 289, 311, 326, 341, 372–373, 379, 387, 397, 464, 528
JPATH_LIBRARIES constant, 64, 118
JPlugin class, 144, 162, 167–168, 176–177
JRegistry class, 86, 104, 155, 190, 205, 224, 241–242, 260–261, 275, 293, 362–363, 486, 515, 520
JRequest methods, 69–71, 74, 76–77, 156, 168–169, 205–206, 208, 236–239, 245, 246, 248, 264–265, 289, 308, 310, 335, 340, 357, 369, 370, 377–378, 382, 384–386, 390–391, 458, 524–525
JRoute, 123–124, 213–215, 249, 264, 296, 300, 303–304, 310, 374, 382, 384–386, 391–392, 461, 528
JRouterSite, 46, 53, 69, 300, 302
JSHOW language key, 180, 293, 360
JSite class, 28, 46, 68–69, 70, 74, 76–77, 79, 81–82, 85–86, 142–143, 516, 519
JSite dispatch() method, 70–72
JTable class, 12, 87, 137, 229, 254, 260–262, 293, 337–338, 346–347, 432, 452, 515
JToolBarHelper, 315–318, 335, 396, 454
JURI object, 68–71, 86, 293, 302, 468, 471–472, 515, 537
JUser, 85–86, 147, 153, 194, 206, 257, 362, 387, 515, 520
JView, 266, 272, 275, 289, 314–315, 334, 361, 379
JXMLElement, xxiii, 86, 224, 225, 280
.sys.ini language files, 47, 170–171, 178, 199, 216
file format, xxiii
file keys, 11
files, xxiii, 6, 47, 51, 73–74, 91–92, 106, 131, 136–137, 169, 178, 189, 198–201, 216, 226, 267, 349, 535
folder, 51, 92, 172, 189, 198–199, 349
language key, 11–12, 134, 136–137, 199, 201, 225, 269, 317
Language Manager, 52, 137, 141
language pack, 12
language() method, 529
Latest Articles module, 108–113, 115, 117, 119
Latest News module, 108–109, 125, 132
alternative layouts, 125–126, 191, 202, 204, 209, 215, 226, 363–364, 531
article list, 5
changing the look of a component with, 121–125
latest article module example, 108–121
Latest News module layout file example, 110–111
order of display, 5
overrides, 91–122, 135, 137, 165, 363
Single Article view, 9
template override file, 5
user registration component example, 121–125
using JHTML::_syntax in, 120–121
using JHTMLString truncate in, 116–120
using strip_tags to fix problems in, 113–116
leftJoin() method, 194, 210, 433
LICENSE.txt file, 55, 161, 174, 216, 351
Linux, 17, 19, 20, 22, 36, 38, 43, 64, 171–173, 482, 534–535
loadAssoc() method, 260, 440–441
loadAssocList() method, 440–441
loadFormData() method, 276–279, 339
loadObject() method, 147, 151–152, 206, 208, 389, 440–441, 494
loadObjectList() method, 193, 195, 208, 213–214, 439–441, 488–490
loadResult() method, 208, 348, 440–441, 500–501, 504
loadRow() method, 440
Mac OS X, 17, 19–20, 22, 36, 38, 64, 171–173
Magic constants, 510
malicious code, 15, 55, 60, 150, 175, 191, 203, 205–206, 212, 223, 226, 248, 272, 275, 369–370, 381, 434–435, 451
Mapping tables, 88, 377, 384, 386–399, 402, 430–432, 436, 438, 482, 489–492, 496
md5 hash command, 153, 280–281, 322
Media Manager, 44, 52, 447, 463, 466
Metadata, 7, 71–72, 127, 231–232, 260–261, 291, 359–360, 366, 461–462
Method chaining, 78, 264, 358, 377, 435, 480, 489, 520
Method signatures, 145, 148–149, 186
methods.php file, 56
Microsoft Internet Information Services (IIS), xxi, 1–3, 17, 19, 55, 62, 535, 537
Microsoft SQL Server, xxiv, 19, 193, 407, 432
Modal window, 234, 447, 454–455, 457–458
Model-view-controller (MVC) design pattern, xxiv, 10, 75, 229–232, 235, 237, 247, 251, 262, 263, 287–288, 305, 355, 386, 395, 402–403, 471, 534, 536–537
Module chrome, 92, 98, 103–105, 129–130, 513
modChrome function, 104–105, 129–131, 134
modChrome_container function, 104–105
Module Manager, 47–48, 52, 98, 105, 109, 125, 131, 187, 190–191, 198–199, 217
Modules, xix, 5–6, 9, 14, 16, 42, 44, 47–48, 50, 52–54, 72, 76, 79, 81, 83–84, 88, 92–93, 97–99, 103–105, 109–110, 121–122, 129–133, 137, 180, 187–227, 230–231, 233–234, 287, 296, 321, 378, 458, 460, 513, 530, 534–536
best practices, 227
custom JFormRule class, 220–222
integer type in JForm, 218–219
integer filters in JForm, 219–220
layout file/default.php file, 215–216
mod_articles_archive subfolder, 49, 202
mod_articles_categories subfolder, 49
mod_articles_category subfolder, 49
mod_articles_latest subfolder, 49, 109–111, 118, 120, 125, 132
mod_articles_news subfolder, 49
mod_articles_popular subfolder, 49
mod_banners subfolder, 49
mod_breadcrumbs subfolder, 49
mod_finder subfolder, 49
mod_finder. See also Smart Search engine
mod_footer subfolder, 49
mod_languages subfolder, 49
mod_latest, 54
mod_logged, 54
mod_login subfolder, 49, 54, 105
mod_menu subfolder, 49, 54, 187
mod_multilangstatus, 54
mod_popular, 54
mod_quickicon, 54
mod_random_image subfolder, 49
mod_related_items subfolder, 49
mod_rewrite feature, 55
mod_search subfolder, 49
mod_sections subfolder, 49
mod_stats subfolder, 49
mod_status, 54
mod_submenu, 54
mod_syndicate subfolder, 49
mod_title, 54
mod_users_lastest.php file, 191
mod_users_latest subfolder, 49, 188–192, 195–196, 199
mod_weblinks subfolder, 49
mod_whosonline subfolder, 49
mod_wrapper subfolder, 49
modules.php file, 130
packaging the module, 226
Show Articles by Current User example, 197–217
validating parameters in JForm, 218–225
validation error messages, 222–223
monitor.php file, 482, 484, 486, 496–497
MooTools, 48, 94, 268, 286, 443–448, 450, 452–454, 456, 458, 460, 462, 464, 466–468, 470–473, 529
Multiselect, 268, 326, 447, 458–459
mymeta.xml file, 161
MySQL, xix, xxi, xxiii–xxiv, 1, 2, 17, 19–20, 86, 171, 193, 207, 214, 324–325, 405, 407–410, 414, 418, 424–425, 429, 525, 535, 536
version 5.0.4, xxiii
Naming conventions, 74–75, 85, 104, 120, 134, 140, 168, 177, 250, 252, 301, 314, 514
NetBeans, 17, 21–22, 30–36, 38, 40, 518, 535, 536
News feed, 72, 87–88, 303–304, 428
NOT NULL attribute, 324–325, 408, 412–414, 417
Notepad++, 37
now() method, 68
Nusphere’s PhpED, 37
ob_end_clean() method, 75
ob_get_contents() method, 75
ob_start() method, 75, 190, 267
Object-oriented programming (OOP), xxiii, 11, 62, 230, 241, 243–244, 247, 278, 445, 514–522
advanced code techniques, 519
constructor method, 515
extends, 516
inheritance in, 516
method chaining, 520
parent keyword, 518
private modifiers, 517
protected modifiers, 517
public modifiers, 517
regular expressions in, 522
standard class in, 516
static methods, fields, and variables, 517
variable class, 521
viewing defined variables, 519
viewing the stack trace, 519
ON clause, 210
ON statement, 421
onAfterDispatch event, 71, 76, 84
onAfterInitialise event, 84, 142
onAfterRender event, 78, 81, 84, 142–145
onBeforeCompileHead plugin, 159–164
onBeforeRender() method, 78–79, 84
onBeforeSave event, 6–8, 173, 176
onclick, 240–241, 317, 327, 458–459, 461, 469
onContentAfterSave() method, 154
onContentBeforeDelete() method, 154–155
onContentBeforeSave, 139
onContentChangeState, 255, 257–258
onContentPrepare, 530
onContentPrepareForm, 176–177, 181–182, 279
onContentSearch event, 141
onContentSearchAreas event, 141
onSuccess, 470
onUserAuthenticate event, 141, 146–148
onUserBeforeSave event, 142, 167–168
Option command, 72
options() method, 269–270, 531
ORDER BY clause, 193, 201, 213, 418–419, 424–426, 431–432, 433–435
order() method, 194, 213, 433–434, 530
ordering() method, 531
overrides, 4–6, 14, 16, 47, 69, 91, 105, 108, 121, 125–126, 129, 134, 137, 178, 226, 282, 331, 398, 481
files, xix, 92, 110–112, 121–122, 125, 134, 137, 165, 171, 267, 528
layout, 91–121. See also layout
Overrides tab, 137
table overrides, 137
Pagination, 265–266, 273–275, 314–315, 322, 328–329, 361–363, 374–375, 439, 455, 458
panel() method, 286, 343, 531–532
Params object, 390
Parent class, 81–82, 143–144, 168, 184, 238, 240, 242–243, 246, 250, 252, 257, 260–262, 277, 311–312, 348, 377, 382, 397–398, 489, 516–518, 535–536
Parent document, 454
parse() method, 68, 70, 78, 293, 301–303, 537
parseTemplate() method, 78
Passwords, 18, 50, 60, 145–147, 149–154, 414, 449–451, 483–484, 495
Performance penalties, 81
Permissions, 21, 134, 211, 235–236, 240, 256–257, 271–274, 282, 329, 333, 336–337, 339–370, 375, 380
.ini file format, xxiii
alternative if/then/else syntax, 98–100
alternative syntax in, 507–508
arithmetic operators, 502
arrays in, 509
break statement, 505
class declaration files, 513
closing tag, 499
code blocks, 500
constants in, 510
converting strings to integers with, 502
current directory in, 510
declaring variables in, 508
defining constants in, 510
do/while loops, 506
echo command, 11, 82–83, 196–197, 266–267
elseif statements, 158, 273, 363, 365, 503–504
exception handing, 278
explode() function, 152
file structure, 499
files with PHP and HTML, 499
foreach loops, 99, 111–112, 146, 197, 214–216, 271, 273, 302, 329, 401, 440, 458, 488, 505–506
function declaration files, 513
function structure in, 511
function variable scope in, 511–512
if statement conditions, 152
if statements, 23, 99, 149, 152, 155–156, 158–159, 169, 181, 196, 197, 212, 274, 299, 401, 500, 503–505, 507–508, 520, 522
if/then statements, 98, 134, 151, 153, 205, 215, 501
including file types in, 512–514
logical operators in, 503
looping statements in, 505–507
mixed files, 514
mixing with HTML, 96
nonboolean values in, 152
parse_ini_file command, xxiii
passing variables by reference, 512
PHP Development Tools (PDT), 22, 30
PHPEclipse, 30
PHP-only files, 499
scripts that declare classes, 140
setting variable types in, 502
special characters in, 501
string concatenate, 502
strings, 510
switch statements in, 505
ternary operator, 502
try/catch blocks in, 278
uppercase vs. lowercase in, 144–145
using constants, 65
variable scope in, 508
version 4, 148
version 5, 148
version 5.2, xxiii, 4, 148, 161, 164, 278
warnings, 508
phpMyAdmin, 171, 325–326, 405, 408, 414–419, 496
Plugin Editor, 164
Plugin Manager, 52, 143, 155, 161, 170–171, 180–181, 185–186
Plugins, xix, 6–9, 14–16, 22, 48, 52, 64, 70, 76, 83, 95, 137, 139–186, 188–189, 230, 233–255, 257–258, 277, 279, 280, 287, 385, 534
adding language files in, 169–170, 178
adding parameters to a plugin, 179–182
adding PHP plugin files in, 167–169
adding XML file in, 166
authentication plugin type, 141
best practices in developing, 186
captcha plugin type, 141
content plugin type, 141
creating the form XML file, 174–176
creating the plugin PHP file, 176–178
creating the plugin, 174
creating the XML file, 174
editors plugin type, 141
editors-XTD plugin type, 141
execution of, 154–155, 159–160
extension plugin type, 141
how Joomla! classes are loaded, 183–184
improved user registration plugin example, 173–179
naming conventions for, 140
overriding core classes with, 182–186
overriding JTableNested class with, 184–186
packaging finished plugins, 171–173, 179
plugin.php file, 144
search plugin type, 141
Smart Search plugin type, 142
system plugin type, 142
testing a plugin, 170–171, 178–179
uninstalling, 171
updating the approval override file, 165–166
user plugin type, 142
user registration plugin, 164–186
populateState() method, 320–321, 369, 390, 397
preg_match_all statements, 78–79
preg_replace command, 73–74, 522
prepare() method, 530
preprocessForm() method, 276
Primary keys, 260, 306, 333, 383, 389, 408–410, 412, 428, 430–431
Program flow, 6–7, 60, 276, 306, 444, 488
Protected method, 300, 397, 481
publish() method, 241–249, 251, 253–259, 262, 311–312
publishedOptions() method, 269, 531
Publishing Options, 285
quote() method, 150, 208, 212, 369–370, 390, 434–435, 490, 520–521
quoteName() method, 324, 490, 520–521
radioList() method, 531
Read More break, 113
README.txt file, 55
Redirect value, 237
redirect() method, 25, 236–238, 264, 289, 308, 357
Reference table, 429
register() method, 66, 117–121, 203–204, 311, 387, 513–514
render() method, 72, 75–81, 93, 142–143
renderComponent() method, 72, 519
renderModule() method, 190
repareDocument() method, 303, 364, 380–381
Repository, 26, 39, 41, 57, 186, 475, 477
require command, 190–191, 196, 204
require_once, 65–66, 75, 182, 189, 191, 203–204, 263, 289, 301, 311, 387, 513–514
reset() method, 255
Return command, 153, 255, 300, 511
Return value, 145, 158, 264, 439–440, 504
robots.txt file, 55
route() method, 68–70, 85, 142, 302
router.php file, 46, 53, 69, 215, 288, 300–301, 513
save() method, 240, 250–251, 253, 258–259, 283, 289, 341
saveorder() method, 243, 249, 251, 253, 259
Search text filter, 399
Search-engine-friendly, 142, 145, 294, 522, 533
administrator login, 11
authentication, 50, 141, 145–146, 149, 153, 476
authorized user, 531
hackers, 169, 201, 208, 219, 223, 235, 239–240, 245, 259, 272, 282, 320, 339, 345–346, 384, 435
malicious code, 15, 55, 60, 150, 175, 191, 203, 205–206, 212, 223, 226, 248, 272, 275, 369–370, 381, 434–435, 451
passwords, 18, 50, 60, 145–147, 149–154, 414, 449–451, 483–484, 495
permissions, 21, 134, 211, 235–236, 240, 256–257, 271–274, 282, 329, 333, 336–337, 339–370, 375, 380
user profiles, 60
SEF, 71, 72, 140, 142, 144–145, 206, 215, 293–294, 296, 300, 302–304, 340, 537
SELECT query, 150, 193–194, 269, 292, 327, 349, 359, 415, 419–433, 436, 438–440, 456, 534
Self keyword, 297
sendNotificationEmail() method, 493, 495–496
sendResponse() method, 469–470
set() method, 70, 436–437, 489
setFieldAttribute() method, 281–282
setLastVisit() method, 511
setModelState() method, 396–397
setQuery() method, 195, 208, 214, 438–439
setRedirect() method, 392
show_description, 359–360, 372, 375
Single Article menu item, 455
Singleton design pattern, 85
site() method, 531
Smart Search engine, xxiv, 43, 49, 52, 88, 142
Smultron, 38
SQL, xx–xxi, xxiii–xxiv, 3, 16, 19, 21, 150–151, 175, 193–195, 201, 205, 208, 211, 223, 226, 232–233, 272, 307, 320, 322–323, 325, 369, 398–399, 405–407, 412, 414–429, 432–438, 442, 534, 537
injection attacks, 208
queries, xxi, xxiii, 3, 208, 405, 415–416, 420–421, 432, 442, 537
Standard element, 161
start() method, 286, 343, 531–532
static methods, 72, 193, 205, 297, 501, 517–518
Storage array networks (SANs), 65–66
store() method, 259, 261–262, 347–348
strip_tags function, 113, 115, 119, 121, 382
strrpos function, 116
sub_id, 357, 374, 376–377, 383–386, 390–391
subscribe() method, 383–385, 391–392
Subscription Manager plugin example, 305–353, 355–403
add and edit form for, 341–346
category helper file, 371
category layout files, 371–375
component entry point, 356–357
controller method for new task, 396
controller method to export file, 400–401
controller validate method, 385–386
creating a back-end subscriber report, 395
default controller for, 309–311
default controllers for, 357–358
detailed design of, 306
folder structure, 307
functional overview of, 305–306
installation and configuration of, 351–353
installation XML file, 355–356
manager screen layout for, 326–331
packaging the component, 394
real-world considerations, 402
submanager controller for, 311–314
subscriber report in action, 401–402
subscription edit controller methods, 376–378
subscription-category view, 359–375
subscriptions screen for, 308–314
subscriptions, 292, 305–306, 308, 314, 317, 322–326, 333, 347–348, 350, 359, 367–369, 371, 374–376, 378, 395, 398, 400–402, 432, 482, 486–491, 494, 496–497
subscription id, 306, 311, 333, 358, 389, 399, 496
creating a Subscription Manager, 305–353, 355–403.
subscription.xml file, 307, 331, 344, 356, 379, 383
substr function, 73, 113, 115–116, 301, 323, 399
SVN repository, 41
Switch statements, 500
table check() method, 262
table load() method, 260
Table names, 156–157, 193, 338, 347, 371, 407–408, 414, 427–428, 496
table store() method, 261
taskMap array, 241, 243–244, 249–250
TCP/IP, 2
adding a new Menu Item layout, 126–129
alternative layouts, 125–126, 191, 202, 204, 209, 215, 226, 363–364, 531
Beez20 template, 49, 92, 100, 102, 105–108, 110–111, 121, 123, 125–126, 130–132, 137, 165, 173, 464, 467
creating a layout override file, 109–112. See also layout overrides
language overrides, 134–137. See also languages
model overrides, 137
Template Manager, 14, 52, 92, 100, 107
template overrides, 5, 14, 108, 126, 204, 267, 464, 531, 537
Ternary operators, 133–134, 222, 502, 504
test() method, 221–222, 225, 451
TEXT filter type, 135, 408–409, 410, 412
Time stamp field, 68
TINYINT filter type, 408–409, 411, 413
tmpl variable, 77, 93, 109–110, 121, 126–127, 180, 188–191, 199, 232, 267, 282, 286, 288, 291, 296, 307, 309, 326, 331, 341, 356, 359, 371, 382, 391, 448, 452, 454–458, 460, 528
token() method, 530
automated test programs, 39
automatic builder software, 38–39
automatic code completion, 24
code completion, 24, 30, 32–33, 37
commercial integrated design environments (IDEs), 37
error reporting, 30, 133, 205, 480
integrated design environments (IDEs), 22–23
open-source integrated design environments (IDEs), 22–36
PHPEclipse, 30
syntax highlighting, 23–24, 30–31, 37–38
text editor, 21, 23, 38, 325, 499
version control software, 38
Tooltips, 268, 283, 287, 291, 326, 341, 373–374, 382, 444, 446–447, 460, 463, 468
toString() method, 82, 195, 261, 433, 439
Translated strings, 135
trigger() method, 139, 140, 143–144, 154, 258
triggerEvent() method, 143
truncate() method, 116–117, 119–120, 527, 532
Try/catch blocks, 72, 277, 278, 281, 485–486
Unique names, 136
updateMapRow() method, 388–389
updateSubscriptionMapping() method, 385–387
User id, 89, 306, 389–399, 495
User interface, 11, 316, 336, 446, 451–452, 535
User Manager, 52, 142, 171, 452, 454, 533
User-Defined Category Levels, xxii
USERNAME, 523
UTF-8, 47, 56, 116, 379, 410–411, 499, 510
validate() method, 223, 240, 259, 384–386
var_dump output, 112–113, 160, 519
VARCHAR filter type, 408–409, 411–413
Variables
$_REQUEST, 156, 165, 169, 206, 230, 235, 238, 268, 284, 292, 384
$application field, 85
$clean, 75
$conf, 265
$config, 86, 242–243, 247, 252–254, 312, 319–320, 338, 367, 378, 484, 485–487
$data, 80–83, 155–158, 177, 181, 246, 258–259, 276–277, 279–280, 282, 332–333, 338, 340, 385–386, 389, 396, 400, 439, 440–442, 517, 524
$db, 146–147, 149–152, 192–193, 195, 206, 208–209, 212–213, 218, 322–324, 347–348, 367–370, 388–390, 398–400, 433, 435–439, 483–484, 486–487, 500–501, 504
$dispatcher, 139–140, 143, 154, 254, 257–258, 279, 486–487
$document, 71–72, 76–81, 86, 160, 162–163, 265, 471–472
$event, 143
$form, 177, 181–182, 221–224, 258–259, 276–279, 281–282, 334, 338–339, 385
$id, 150, 206–208, 239, 264, 297, 299–302, 310, 321, 357–358, 370, 384–385, 391, 441, 465
$item, 111–113, 115, 119–121, 213–214, 216, 271–273, 296–300, 329–330, 334, 362, 374–375, 379–380, 458, 465, 527, 529–530
$items, 205, 213–215, 298, 314, 361–362
$key, 183, 333, 377, 383, 489, 505–506
$limitstart, 369, 433, 439–440
$list, 111–112, 119, 121, 203–204, 216
$name, 79, 189, 196–197, 247, 252, 277, 286–287, 312, 378, 391, 394, 500
$now, 206–207, 209, 211–212, 488, 490–491, 517
$nullDate, 206–207, 209, 211–212, 368
$option, 74
$options, 68, 146–148, 277–278, 280–281, 371, 518
$params, 71–72, 77–78, 80–81, 104, 130–134, 189–193, 195–196, 203, 205, 213, 216, 218, 321, 361–363, 369, 379–380, 390
$params, 78
$path, 75
$query, 147, 150–151, 192–195, 201, 206–213, 218, 300–301, 322–323, 348, 367–369, 388–390, 398–400, 432–439, 488, 490–492, 494
$response, 146–149, 151, 153–154, 470
$result, 69, 147, 151–159, 168–169, 193, 195, 222–223, 257, 266–267, 318–319, 377, 384, 522
$subscription, 384–385, 387–388, 392, 491–494
$table, 154–158, 254–255, 257, 275, 340, 347, 511
$this, 24–25, 30, 69–71, 77–82, 94–97, 99, 122, 129, 135, 143, 146, 154–156, 158, 162–163, 165–166, 168, 177, 181, 239, 242–244, 246–250, 252, 254–258, 260, 264–286, 296–297, 303, 310–311, 315, 320–323, 326, 329–330, 333–335, 338, 340–343, 347–349, 358, 361–382, 384–386, 388–392, 396–399, 435, 439, 448, 456–458, 460–461, 465, 467, 469, 480–481, 486–495, 511, 517–518, 521, 529–530
$value, 221–222, 224–225, 246–248, 254, 256–257, 505–506
$view_item, 377
$with, 81
Version control software, 22, 26, 38, 40 vi, 38
Web servers, xxi, 1–3, 17–19, 40, 44–45, 55, 59, 60–62, 294, 443–444, 477–478, 497, 533, 535, 537
web.config.txt file, 55
Weblinks component, 44, 49, 52, 87, 141–142, 205, 229, 231–237, 239–241, 243, 245, 247, 249, 250–253, 255–259, 261–264, 267–268, 273–276, 282, 284–285, 287–291, 293–305, 308, 311, 314–316, 320, 326–328, 331, 334–335, 352, 358, 361, 364, 372, 403, 457–459
back-end summary, 287
com_weblinks, 43, 52, 156, 231, 233–234, 236–241, 249, 256, 257, 263–264, 267–268, 275–277, 283, 287–288, 290–293, 296–298, 300–301, 303, 308, 311, 326
component entry point, 235–237
front-end component of, 288–293
Weblink Edit view, 263
weblink.xml file, 232, 277, 288
weblinks.php file, 232, 234, 236, 241, 252, 263, 288–289, 308
weblinks.xml file, 232–233, 290
WeblinksBuildRoute() method, 301
WeblinksController, 237, 239, 249, 263, 265, 289, 311
WeblinksControllerWeblink, 237–238, 240, 250–253, 258, 289–290, 332
WeblinksControllerWeblinks, 241, 243, 246–247, 249, 251–253, 311
WeblinksModel getForm() method, 276–280
WeblinksModelWeblink, 247, 252–254, 256, 259–260, 276, 279, 281, 289–290
WeblinksViewWeblinks display() method, 265–267
Wessling, Rouven, 467
WHERE clauses, 150, 193–194, 207–208, 211–213, 324, 369, 419–420, 423–428, 431–435, 437–438
where() method, 194, 207, 210–211, 433–434, 436–489
While statements, 500
White list filtering, 524
Windows, 17, 19, 22, 36–37, 64, 171–172, 478, 535
WORD filter type, 523
XHTML, xx–xxi, 1, 2, 16, 94–95, 535, 537
Yahoo, 294
ZendStudio, 37