/**
* AlgorithmPress PHP Component Templates
* Collection of PHP component templates for the AlgorithmPress PHP-WASM Builder
*/
const PHPComponentTemplates = [
// Basic Components
{
id: 'text-block',
name: 'Text Block',
description: 'A simple text block with PHP variable support',
category: 'Basic',
icon: `
`,
template: `
`,
defaultProps: {
content: 'Text content here',
className: ''
},
properties: [
{
name: 'content',
label: 'Content',
type: 'textarea',
description: 'Text content (supports PHP variables)'
},
{
name: 'className',
label: 'CSS Class',
type: 'text',
description: 'Additional CSS classes'
}
]
},
{
id: 'heading',
name: 'Heading',
description: 'Heading element with PHP variable support',
category: 'Basic',
icon: `
`,
template: `<{{ tag }} class="heading-component {{ className }}">
{{ tag }}>`,
defaultProps: {
tag: 'h2',
content: 'Heading',
className: ''
},
properties: [
{
name: 'tag',
label: 'Heading Level',
type: 'select',
options: [
{ value: 'h1', label: 'H1' },
{ value: 'h2', label: 'H2' },
{ value: 'h3', label: 'H3' },
{ value: 'h4', label: 'H4' },
{ value: 'h5', label: 'H5' },
{ value: 'h6', label: 'H6' }
],
description: 'Heading level tag'
},
{
name: 'content',
label: 'Content',
type: 'text',
description: 'Heading text (supports PHP variables)'
},
{
name: 'className',
label: 'CSS Class',
type: 'text',
description: 'Additional CSS classes'
}
]
},
{
id: 'image',
name: 'Image',
description: 'Image element with PHP variable support for src',
category: 'Basic',
icon: `
`,
template: ` " alt="" class="image-component {{ className }}" style="max-width: {{ maxWidth }}; height: {{ height }};" />`,
defaultProps: {
src: 'https://via.placeholder.com/300x200',
alt: 'Image',
maxWidth: '100%',
height: 'auto',
className: ''
},
properties: [
{
name: 'src',
label: 'Image Source',
type: 'text',
description: 'URL of the image (supports PHP variables)'
},
{
name: 'alt',
label: 'Alt Text',
type: 'text',
description: 'Alternative text for the image'
},
{
name: 'maxWidth',
label: 'Max Width',
type: 'text',
description: 'Maximum width (px, %, etc.)'
},
{
name: 'height',
label: 'Height',
type: 'text',
description: 'Height (px, auto, etc.)'
},
{
name: 'className',
label: 'CSS Class',
type: 'text',
description: 'Additional CSS classes'
}
]
},
{
id: 'container',
name: 'Container',
description: 'A container div for organizing content',
category: 'Basic',
icon: `
`,
template: `
`,
defaultProps: {
content: '',
padding: '20px',
margin: '0',
backgroundColor: 'transparent',
className: ''
},
properties: [
{
name: 'content',
label: 'Content',
type: 'textarea',
description: 'HTML content for the container'
},
{
name: 'padding',
label: 'Padding',
type: 'text',
description: 'Padding (px, em, etc.)'
},
{
name: 'margin',
label: 'Margin',
type: 'text',
description: 'Margin (px, em, etc.)'
},
{
name: 'backgroundColor',
label: 'Background Color',
type: 'color',
description: 'Background color of the container'
},
{
name: 'className',
label: 'CSS Class',
type: 'text',
description: 'Additional CSS classes'
}
]
},
// PHP-Specific Components
{
id: 'php-code',
name: 'PHP Code',
description: 'Raw PHP code execution',
category: 'PHP',
icon: `
`,
template: `
`,
defaultProps: {
code: '// Your PHP code here\n$greeting = "Hello World!";\necho $greeting;',
className: ''
},
properties: [
{
name: 'code',
label: 'PHP Code',
type: 'code',
language: 'php',
description: 'PHP code to execute'
},
{
name: 'className',
label: 'CSS Class',
type: 'text',
description: 'Additional CSS classes'
}
]
},
{
id: 'php-include',
name: 'PHP Include',
description: 'Include an external PHP file',
category: 'PHP',
icon: `
`,
template: `
`,
defaultProps: {
filename: 'includes/header.php',
className: ''
},
properties: [
{
name: 'filename',
label: 'File Path',
type: 'text',
description: 'Path to the PHP file to include'
},
{
name: 'className',
label: 'CSS Class',
type: 'text',
description: 'Additional CSS classes'
}
]
},
{
id: 'php-form',
name: 'PHP Form',
description: 'Form with PHP processing',
category: 'PHP',
icon: `
`,
template: ``,
defaultProps: {
formFields: `
Name
Email
Message
`,
processingCode: `// Validate inputs
if (empty($_POST['name'])) {
$formErrors['name'] = 'Name is required';
}
if (empty($_POST['email'])) {
$formErrors['email'] = 'Email is required';
} elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$formErrors['email'] = 'Email is invalid';
}
if (empty($_POST['message'])) {
$formErrors['message'] = 'Message is required';
}
// If no errors, process form
if (empty($formErrors)) {
// Here you can save to database, send email, etc.
// For example:
// mail('your@email.com', 'Contact Form Submission', $_POST['message'], "From: {$_POST['email']}");
}`,
successMessage: 'Thank you for your submission! We will get back to you soon.
',
formClass: 'needs-validation',
submitButtonText: 'Submit',
submitButtonClass: 'btn btn-primary',
successMessageClass: 'alert alert-success',
showDebug: 'false',
className: ''
},
properties: [
{
name: 'formFields',
label: 'Form Fields',
type: 'textarea',
description: 'HTML for form fields'
},
{
name: 'processingCode',
label: 'Processing Code',
type: 'code',
language: 'php',
description: 'PHP code for form processing'
},
{
name: 'successMessage',
label: 'Success Message',
type: 'textarea',
description: 'Message shown after successful submission'
},
{
name: 'formClass',
label: 'Form Class',
type: 'text',
description: 'CSS class for the form'
},
{
name: 'submitButtonText',
label: 'Submit Button Text',
type: 'text',
description: 'Text for the submit button'
},
{
name: 'submitButtonClass',
label: 'Submit Button Class',
type: 'text',
description: 'CSS class for the submit button'
},
{
name: 'successMessageClass',
label: 'Success Message Class',
type: 'text',
description: 'CSS class for the success message'
},
{
name: 'showDebug',
label: 'Show Debug',
type: 'select',
options: [
{ value: 'true', label: 'Yes' },
{ value: 'false', label: 'No' }
],
description: 'Show debug information'
},
{
name: 'className',
label: 'Container Class',
type: 'text',
description: 'Additional CSS classes for container'
}
]
},
// Database Components
{
id: 'sqlite-database',
name: 'SQLite Database',
description: 'SQLite database operations',
category: 'Database',
icon: `
`,
template: `
exec('
CREATE TABLE IF NOT EXISTS {{ tableName }} (
id INTEGER PRIMARY KEY AUTOINCREMENT,
{{ tableSchema }}
)
');
{{ customCode }}
// Sample query to display data
$results = $db->query('SELECT * FROM {{ tableName }} LIMIT {{ limit }}');
// Display results in a table
if ($results) {
?>
<{{ tableWrapperTag }} class="{{ tableClass }}">
ID
query("PRAGMA table_info({{ tableName }})");
while ($col = $tableInfo->fetchArray(SQLITE3_ASSOC)) {
if ($col['name'] !== 'id') {
$columns[] = $col['name'];
echo "" . htmlspecialchars(ucfirst($col['name'])) . " ";
}
}
?>
fetchArray(SQLITE3_ASSOC)) {
echo "";
echo "" . htmlspecialchars($row['id']) . " ";
foreach ($columns as $column) {
echo "" . htmlspecialchars($row[$column] ?? '') . " ";
}
echo " ";
}
?>
{{ tableWrapperTag }}>
No results found';
}
// Close the database connection
$db->close();
?>
`,
defaultProps: {
dbName: 'myapp',
tableName: 'users',
tableSchema: 'name TEXT,\n email TEXT,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP',
customCode: '// Add sample data if table is empty\n$count = $db->querySingle("SELECT COUNT(*) FROM users");\nif ($count === 0) {\n $db->exec(\'\n INSERT INTO users (name, email) VALUES\n ("John Doe", "john@example.com"),\n ("Jane Smith", "jane@example.com"),\n ("Bob Johnson", "bob@example.com")\n \');\n}',
limit: 10,
tableWrapperTag: 'table',
tableClass: 'table table-striped',
className: ''
},
properties: [
{
name: 'dbName',
label: 'Database Name',
type: 'text',
description: 'Name of the SQLite database'
},
{
name: 'tableName',
label: 'Table Name',
type: 'text',
description: 'Name of the database table'
},
{
name: 'tableSchema',
label: 'Table Schema',
type: 'textarea',
description: 'SQL schema definition (without ID field)'
},
{
name: 'customCode',
label: 'Custom Code',
type: 'code',
language: 'php',
description: 'Custom PHP code for database operations'
},
{
name: 'limit',
label: 'Results Limit',
type: 'number',
description: 'Maximum number of results to display'
},
{
name: 'tableWrapperTag',
label: 'Table Wrapper Tag',
type: 'select',
options: [
{ value: 'table', label: 'table' },
{ value: 'div', label: 'div' }
],
description: 'HTML tag for the table wrapper'
},
{
name: 'tableClass',
label: 'Table Class',
type: 'text',
description: 'CSS class for the table'
},
{
name: 'className',
label: 'Container Class',
type: 'text',
description: 'Additional CSS classes for container'
}
]
},
// Dynamic Content Components
{
id: 'conditional-content',
name: 'Conditional Content',
description: 'Show content based on conditions',
category: 'Dynamic',
icon: `
`,
template: `
{{ trueContent }}
{{ falseContent }}
`,
defaultProps: {
condition: 'isset($_GET["show"]) && $_GET["show"] === "true"',
trueContent: 'This content is shown when the condition is true.
',
falseContent: 'This content is shown when the condition is false.
',
className: ''
},
properties: [
{
name: 'condition',
label: 'Condition',
type: 'code',
language: 'php',
description: 'PHP condition to evaluate'
},
{
name: 'trueContent',
label: 'True Content',
type: 'textarea',
description: 'Content to show when condition is true'
},
{
name: 'falseContent',
label: 'False Content',
type: 'textarea',
description: 'Content to show when condition is false'
},
{
name: 'className',
label: 'CSS Class',
type: 'text',
description: 'Additional CSS classes'
}
]
},
{
id: 'loop',
name: 'PHP Loop',
description: 'Repeat content with a PHP loop',
category: 'Dynamic',
icon: `
`,
template: `
$item) {
?>
{{ itemTemplate }}
`,
defaultProps: {
array: '[1, 2, 3, 4, 5]',
itemTemplate: 'Item #:
',
className: ''
},
properties: [
{
name: 'array',
label: 'Array',
type: 'code',
language: 'php',
description: 'PHP array to iterate over'
},
{
name: 'itemTemplate',
label: 'Item Template',
type: 'textarea',
description: 'Template for each item (use $index and $item variables)'
},
{
name: 'className',
label: 'CSS Class',
type: 'text',
description: 'Additional CSS classes'
}
]
},
// API Components
{
id: 'api-request',
name: 'API Request',
description: 'Make an API request using PHP',
category: 'API',
icon: `
`,
template: `
[
'method' => "{{ method }}",
'header' => "Content-Type: {{ contentType }}\\r\\n" .
"Accept: application/json\\r\\n" .
{{ customHeaders }}
"User-Agent: PHP-WASM/1.0\\r\\n",
'content' => {{ requestBody }},
'timeout' => {{ timeout }}
]
];
// Create the context
$context = stream_context_create($options);
// Make the request
try {
$response = file_get_contents($apiUrl, false, $context);
$httpStatus = $http_response_header[0];
// Process the response
if ($response !== false) {
// Decode JSON response
$data = json_decode($response, true);
// Display the results based on the selected format
if ("{{ displayFormat }}" === "raw") {
echo "
";
echo htmlspecialchars($response);
echo " ";
} elseif ("{{ displayFormat }}" === "formatted") {
echo "
";
echo htmlspecialchars(json_encode($data, JSON_PRETTY_PRINT));
echo " ";
} elseif ("{{ displayFormat }}" === "table" && is_array($data)) {
// Display as table if data is suitable
echo "
";
// Handle different data structures
if (isset($data[0]) && is_array($data[0])) {
// Array of objects
echo "";
foreach (array_keys($data[0]) as $key) {
echo "" . htmlspecialchars($key) . " ";
}
echo " ";
foreach ($data as $item) {
echo "";
foreach ($item as $value) {
echo "" . (is_array($value) ? "[Array]" : htmlspecialchars((string)$value)) . " ";
}
echo " ";
}
echo " ";
} elseif (is_array($data)) {
// Single object
echo "";
foreach ($data as $key => $value) {
echo "";
echo "" . htmlspecialchars($key) . " ";
echo "" . (is_array($value) ? "[Array]" : htmlspecialchars((string)$value)) . " ";
echo " ";
}
echo " ";
}
echo "
";
} elseif ("{{ displayFormat }}" === "custom") {
// Custom display format
{{ customDisplay }}
}
} else {
echo "
Failed to get response: " . htmlspecialchars($httpStatus) . "
";
}
} catch (Exception $e) {
echo "
Error: " . htmlspecialchars($e->getMessage()) . "
";
}
?>
`,
defaultProps: {
apiUrl: 'https://jsonplaceholder.typicode.com/posts/1',
method: 'GET',
contentType: 'application/json',
customHeaders: '',
requestBody: '""',
timeout: 30,
displayFormat: 'formatted',
tableClass: 'table table-striped',
errorClass: 'alert alert-danger',
customDisplay: '// Custom display code\nif (isset($data["title"])) {\n echo "" . htmlspecialchars($data["title"]) . " ";\n}\nif (isset($data["body"])) {\n echo "" . nl2br(htmlspecialchars($data["body"])) . "
";\n}',
className: ''
},
properties: [
{
name: 'apiUrl',
label: 'API URL',
type: 'text',
description: 'URL of the API endpoint'
},
{
name: 'method',
label: 'HTTP Method',
type: 'select',
options: [
{ value: 'GET', label: 'GET' },
{ value: 'POST', label: 'POST' },
{ value: 'PUT', label: 'PUT' },
{ value: 'DELETE', label: 'DELETE' }
],
description: 'HTTP method for the request'
},
{
name: 'contentType',
label: 'Content Type',
type: 'select',
options: [
{ value: 'application/json', label: 'application/json' },
{ value: 'application/x-www-form-urlencoded', label: 'application/x-www-form-urlencoded' },
{ value: 'text/plain', label: 'text/plain' }
],
description: 'Content type header'
},
{
name: 'customHeaders',
label: 'Custom Headers',
type: 'textarea',
description: 'Additional HTTP headers (one per line: "Header: value\\r\\n" .)'
},
{
name: 'requestBody',
label: 'Request Body',
type: 'code',
language: 'php',
description: 'Body content for POST, PUT requests'
},
{
name: 'timeout',
label: 'Timeout (seconds)',
type: 'number',
description: 'Request timeout in seconds'
},
{
name: 'displayFormat',
label: 'Display Format',
type: 'select',
options: [
{ value: 'raw', label: 'Raw Response' },
{ value: 'formatted', label: 'Formatted JSON' },
{ value: 'table', label: 'Table' },
{ value: 'custom', label: 'Custom' }
],
description: 'How to display the response'
},
{
name: 'tableClass',
label: 'Table Class',
type: 'text',
description: 'CSS class for table display format'
},
{
name: 'errorClass',
label: 'Error Class',
type: 'text',
description: 'CSS class for error messages'
},
{
name: 'customDisplay',
label: 'Custom Display',
type: 'code',
language: 'php',
description: 'Custom PHP code for displaying the response'
},
{
name: 'className',
label: 'Container Class',
type: 'text',
description: 'Additional CSS classes for container'
}
]
},
// UI Components
{
id: 'tabs',
name: 'Tabs',
description: 'Tabbed interface with PHP content',
category: 'UI',
icon: `
`,
template: `
{{ tab1Content }}
{{ tab2Content }}
{{ tab3Content }}
`,
defaultProps: {
tabsArray: "[\n 'tab1' => 'Tab 1',\n 'tab2' => 'Tab 2',\n 'tab3' => 'Tab 3'\n]",
defaultTab: 'tab1',
tab1Content: 'This is the content for Tab 1.
',
tab2Content: 'This is the content for Tab 2.
',
tab3Content: 'This is the content for Tab 3.
',
tabsClass: 'nav nav-tabs',
tabItemClass: 'nav-item',
tabLinkClass: 'nav-link',
activeTabClass: 'nav-link active',
tabContentClass: 'tab-content p-3 border border-top-0 rounded-bottom',
className: ''
},
properties: [
{
name: 'tabsArray',
label: 'Tabs Array',
type: 'code',
language: 'php',
description: 'PHP array of tab IDs and names'
},
{
name: 'defaultTab',
label: 'Default Tab',
type: 'text',
description: 'ID of the default active tab'
},
{
name: 'tab1Content',
label: 'Tab 1 Content',
type: 'textarea',
description: 'Content for Tab 1'
},
{
name: 'tab2Content',
label: 'Tab 2 Content',
type: 'textarea',
description: 'Content for Tab 2'
},
{
name: 'tab3Content',
label: 'Tab 3 Content',
type: 'textarea',
description: 'Content for Tab 3'
},
{
name: 'tabsClass',
label: 'Tabs Container Class',
type: 'text',
description: 'CSS class for tabs container'
},
{
name: 'tabItemClass',
label: 'Tab Item Class',
type: 'text',
description: 'CSS class for tab items'
},
{
name: 'tabLinkClass',
label: 'Tab Link Class',
type: 'text',
description: 'CSS class for tab links'
},
{
name: 'activeTabClass',
label: 'Active Tab Class',
type: 'text',
description: 'CSS class for active tab'
},
{
name: 'tabContentClass',
label: 'Tab Content Class',
type: 'text',
description: 'CSS class for tab content container'
},
{
name: 'className',
label: 'Container Class',
type: 'text',
description: 'Additional CSS classes for container'
}
]
},
// Utility Components
{
id: 'user-session',
name: 'User Session',
description: 'Manage PHP sessions for user data',
category: 'Utility',
icon: `
`,
template: `
" . htmlspecialchars(json_encode($_SESSION[$sessionKey], JSON_PRETTY_PRINT)) . "";
} else {
echo "
" . htmlspecialchars($_SESSION[$sessionKey]) . "
";
}
} else {
echo "
Session variable not found.
";
}
} elseif ($mode === 'form') {
// Show form to modify session data
?>
Session updated successfully!
";
} else {
echo "Invalid JSON format.
";
}
} catch (Exception $e) {
echo "Error: " . htmlspecialchars($e->getMessage()) . "
";
}
} else {
$_SESSION[$sessionKey] = $newValue;
echo "Session updated successfully!
";
}
}
} elseif ($mode === 'clear') {
// Clear the session
if (isset($_SESSION[$sessionKey])) {
unset($_SESSION[$sessionKey]);
echo "Session variable cleared.
";
} else {
echo "Session variable not found.
";
}
}
?>
`,
defaultProps: {
mode: 'display',
sessionKey: 'user_data',
initialValue: '[]',
customSessionCode: '// Custom session code here\n// Example: track page visits\nif (!isset($_SESSION["page_visits"])) {\n $_SESSION["page_visits"] = 0;\n}\n$_SESSION["page_visits"]++;',
formLabel: 'Session Data:',
successClass: 'alert alert-success mt-3',
errorClass: 'alert alert-danger mt-3',
notFoundClass: 'alert alert-warning',
className: ''
},
properties: [
{
name: 'mode',
label: 'Mode',
type: 'select',
options: [
{ value: 'display', label: 'Display' },
{ value: 'form', label: 'Edit Form' },
{ value: 'clear', label: 'Clear' }
],
description: 'Operation mode for session data'
},
{
name: 'sessionKey',
label: 'Session Key',
type: 'text',
description: 'Name of the session variable'
},
{
name: 'initialValue',
label: 'Initial Value',
type: 'code',
language: 'php',
description: 'Initial value if session is not set'
},
{
name: 'customSessionCode',
label: 'Custom Session Code',
type: 'code',
language: 'php',
description: 'Custom PHP code for session operations'
},
{
name: 'formLabel',
label: 'Form Label',
type: 'text',
description: 'Label for the edit form'
},
{
name: 'successClass',
label: 'Success Message Class',
type: 'text',
description: 'CSS class for success messages'
},
{
name: 'errorClass',
label: 'Error Message Class',
type: 'text',
description: 'CSS class for error messages'
},
{
name: 'notFoundClass',
label: 'Not Found Message Class',
type: 'text',
description: 'CSS class for not found messages'
},
{
name: 'className',
label: 'Container Class',
type: 'text',
description: 'Additional CSS classes for container'
}
]
}
];
// Export the components
if (typeof module !== 'undefined' && module.exports) {
module.exports = PHPComponentTemplates;
}