105 بازدید مدت زمان مطالعه 3 دقیقه
| اسکریپت مورد نیاز: | Onepower |
|---|---|
| برنامهنویس: | امیر بصیر |
| شرکت: | تیم برنامه نویسی وان پاور |
| ورژن: | 3.2.0 |
| ورژنهای پشتیبانی شده: | 2.0.0 |
| تکنولوژیها: | PHP Javascript Alpinejs |
| زبانها: | PHP Javascript |
| آخرین بهروزرسانی: | 1 هفته پیش - 1404-09-01 |
| نیازمندی ها: |
PHP 7.4 or Higher |
| آدرس پروژه: | بازدید از پروژه |
| آدرس گیتهاب: | مشاهده در گیتهاب |
| تغییرات: | مشاهده تغییرات |
@ - پیشرفتهترین سیستم نمایش در جهان با پشتیبانی از Alpine.js و کاملترین کتابخانه متدها و فیلترها.
Template Engine ها
{{ }}، {% %}، {!! !!} و دهها نماد دیگر سردرگم شوند، Nova Template Engine متولد شد تا یک انقلاب اساسی ایجاد کند. این موتور قالب بومی که توسط تیم وان پاور به رهبری امیر بصیر طراحی شده، نه تنها یک ابزار، بلکه یک فلسفه جدید در توسعه front-end ارائه میدهد.
Nova Template Engine را مطالعه کنید:
Nova Template Engine با Alpinejs را مطاعه کنید:
Template Engine های معروف جهان یک مشکل مشترک دارند: سینتکس چندپاره
// In Twig you should write like this:
{{ variable }}
{{ variable|filter }}
// In Blade you should write like this:
{{ $variable }}
@foreach($items as $item)
{{ $item->name }}
@endforeach
{{ $variable }}
// In Smarty you should write like this:
{$variable}
{foreach $items as $item}
{$item.name}
{/foreach}
{$variable|filter}
Nova Template Engine با شعار "یک نماد برای تمام نیازها" این مشکل را برای همیشه حل کرد:
// In Nova you just write:
@var(variable)
@for(item in items)
@var(item.name)
@endfor
@var(variable|filter)
Nova قادر است به صورت هوشمندانه تمامی انواع دادههای PHP را تشخیص دهد:
// Recognize simple and multidimensional arrays
@var(users.0.name) // $users[0]['name']
@var(users['admin'].email) // $users['admin']['email']
@var(posts.2.comments.5.text) // $posts[2]['comments'][5]['text']
// تشخیص توابع و متدهای استاتیک
@var(User::getActiveCount()) // User::getActiveCount()
@var(Helper::formatDate(created_at)) // Helper::formatDate($created_at)
// تشخیص ثابتها
@var(App::VERSION) // App::VERSION
@var(PROJECT_STATUS_ACTIVE) // PROJECT_STATUS_ACTIVE
$ و بدون $
// هر دو سینتکس کار میکنند!
@var(user.name) // $user['name'] or $user->name
@var($user.name) // $user['name'] or $user->name
@var(post.title) // $post['title'] or $post->title
@var($post.title) // $post['title'] or $post->title
// Raw PHP - 12 lines of code
<?php foreach($blogs as $blog): ?>
<div class="blog-post">
<h2><?php echo htmlspecialchars($blog['title']); ?></h2>
<p><?php echo substr(strip_tags($blog['content']), 0, 200); ?>...</p>
<span>Author: <?php echo strtoupper($blog['author']['name']); ?></span>
<span>Date: <?php echo date('Y-m-d', $blog['created_at']); ?></span>
<img src="<?php echo $blog['image']; ?>" alt="<?php echo $blog['title']; ?>">
</div>
<?php endforeach; ?>
// Nova - 8 lines of code with better readability
@for(blog in blogs)
<div class="blog-post">
<h2>@var(blog.title)</h2>
<p>@var(blog.content|pure:200)...</p>
<span>Author: @var(blog.author.name|upper)</span>
<span>Date: @var(blog.created_at|date:'Y-m-d')</span>
@img(file:blog['image'], alt:blog['title'], size:800)
</div>
@endfor
// Raw PHP - complex and error-prone
<?php if($user['status'] === 'active'): ?>
<?php if($user['role'] === 'admin'): ?>
<div class="admin-panel">
<h3>Admin Panel</h3>
<p>Welcome <?php echo $user['first_name'] . ' ' . $user['last_name']; ?></p>
</div>
<?php elseif($user['role'] === 'editor'): ?>
<div class="editor-panel">
<p>Dear Editor, <?php echo $user['first_name']; ?></p>
</div>
<?php else: ?>
<div class="user-panel">
<p>Dear user</p>
</div>
<?php endif; ?>
<?php else: ?>
<div class="inactive-account">
<p>Your account is inactive.</p>
</div>
<?php endif; ?>
// Nova - Simple and readable
@if(user.status === 'active')
@switch(user.role)
@case('admin')
<div class="admin-panel">
<h3>Admin Panel</h3>
<p>Welcome @format('%s %s', user.first_name, user.last_name)</p>
</div>
@break
@case('editor')
<div class="editor-panel">
<p>Dear Editor, @var(user.first_name)</p>
</div>
@break
@default
<div class="user-panel">
<p>Dear user</p>
</div>
@endswitch
@else
<div class="inactive-account">
<p>Your account is inactive.</p>
</div>
@endif
// Number and currency formatting
@var(price|number_format:2) // 12345.678 → 12,345.68
@var(price|currency:'USD') // 12345 → $12,345.00
@var(score|percent:1) // 0.8567 → 85.7%
// Text and String Management
@var(title|upper) // hello world → HELLO WORLD
@var(title|lower) // HELLO WORLD → hello world
@var(title|capitalize) // hello world → Hello World
@var(title|slugify) // Hello World → hello-world
@var(content|pure:200) // Remove HTML tags and shorten
// Working with Date and Time
@var(created_at|date:'Y-m-d H:i') // Date formatting
@var(updated_at|time_ago) // 2 hours ago
@var(timestamp|relative_time) // 3 days later
// Processing Arrays
@var(tags|join:', ') // ['php','js'] → php, js
@var(users|count) // Number of array elements
@var(numbers|max) // Maximum value
@var(numbers|min) // Lowest value
@var(items|slice:0:5) // First 5 elements of the array
// Default value
@var(user.avatar|or:'default-avatar.jpg')
@var(blog.excerpt|or:blog.content|pure:150)
// Smart bets on Nova
@var(user.points|if:'Number of points:') // If points exist
@var(blog.views|if_gt:1000:'Most visited') // If more than 1000 views
@var(product.stock|if_eq:0:'Non-existent') // If the balance is zero
// Simple image with advanced settings
@img(module:'blog', file:post['image'], size:800, alt:post['title'])
// Image with automatic fallback
@img(module:'users', file:user['avatar'], size:300, alt:user['name'], default:'default-avatar.jpg')
// Image with custom style and class
@img(module:'portfolio', file:project['cover'], size:1200, alt:project['title'],
class:'project-image', style:'border-radius: 12px;')
// Image without lazy loading
@img(module:'gallery', file:photo['url'], size:1024, alt:photo['caption'], lazy:false)
// Minimum parameters - Smartest mode
@img(file:product['image'], alt:product['name'])
// Simple loop
@for(i in 0..10)
<span>Number: @var(i)</span>
@endfor
// Loop with continue and break
@for(i in 0..20)
@continue(i % 2 === 0) // @// Skip even numbers
@break(i > 15) // @// Stop at 15
<p>Odd number: @var(i)</p>
@endfor
// Loop over arrays
@for(user in users)
<div class="user-card">
<h3>@var(user.name)</h3>
<p>@var(user.email)</p>
</div>
@endfor
// Loop with key and value
@for(key, value in settings)
<div class="setting-item">
<strong>@var(key):</strong>
<span>@var(value)</span>
</div>
@endfor
// Match structure for simple conditions
@match(user.status)
@when('active')
<span class="badge badge-success">Active</span>
@when('pending')
<span class="badge badge-warning">Waiting</span>
@when('suspended')
<span class="badge badge-danger">Suspended</span>
@default
<span class="badge badge-secondary">Uncertain</span>
@endmatch
// switch structure for complex conditions
@switch(order.status)
@case('pending')
<div class="alert alert-info">
<p>Your order is awaiting confirmation.</p>
<p>Date: @var(order.created_at|date:'Y-m-d')</p>
</div>
@break
@case('processing')
<div class="alert alert-warning">
<p>Your order is being processed.</p>
<p>@var(order.items|count) Item in preparation</p>
</div>
@break
@case('completed')
<div class="alert alert-success">
<p>Your order has been completed.</p>
<p>Final amount: @var(order.total|currency:'IRR')</p>
</div>
@break
@default
<div class="alert alert-secondary">
<p>The order status is unclear.</p>
</div>
@endswitch
Nova Template Engine انتخاب برتر است؟
Nova تنها یک موتور قالب نیست؛ یک اکوسیستم کامل برای توسعه front-end است:
@ را به خاطر بسپارید
PHP پشتیبانی میشوند
Alpine.js - تعاملات پیچیده بدون JavaScript
PHP 7.4+
@)
{{ }}، {% %}، {!! !!}
dot و bracket
@var(user.name) و @var(user['name'])
@var(blog.0.title) و @var(blog[0]['title'])
upper, lower, capitalize, slugify
number_format, currency, percent
date, time_ago, relative_time
join, count, max, min, slice
JavaScript
Modal، Dropdown، Tab
state با سینتکس ساده
transition و animation داخلی
resize و بهینهسازی خودکار
lazy loading پیشرفته
fallback هوشمند برای تصاویر مفقود
for با سینتکس ساده
continue و break در حلقهها
key-value در حلقهها
if با سینتکس طبیعی
switch-case پیشرفته
match برای شرطهای ساده
sprintf-style formatting
or برای مقادیر پیشفرض
if برای نمایش شرطی
if_gt, if_lt, if_eq
integer, float, string
object properties
escaping خودکار خروجیها
XSS
cache خودکار قالبها
memory
lazy برای منابع
PHP 7.4+
integration با فریمورکهای دیگر
API برای توسعهدهندگان
logging فعالیتها
profiling عملکرد
isolation بین ماژولهای مختلف
block و section مدیریت
override هوشمند بخشها
layout های چندسطحی
integration با سیستمهای i18n
RTL و LTR
cache خودکار خروجیها
invalidation هوشمند کش
driver های مختلف
HTML5
CSS frameworks
integration با JavaScript libraries
accessibility
CLI
documentation
Nova Template Engine را به کاملترین و پیشرفتهترین موتور قالب در جهان تبدیل کرده است.