راکت

شخصی سازی bladeها در laravel

6 پاسخ

سلام من چطور می تونم چنین چیزی توی blade ایجاد کنم

@logo(iran)

من از مثال زیر استفاده می کنم
اما جواب نمیده
لطفا راهنمایی بفرمایید

https://engageinteractive.co.uk/blog/custom-blade-directives-in-laravel-5

یعنی هم یه خروجی html به همراه متن نمایش بده در اینجا logo اسم یک فراخوان من در داخل composerهست
و متن iran هم یک متنی هست که باید داخل view مربوطه نمایش داده بشه

Blade::directive('input', function($expression)
{
    $view = ‘cms.content.forms.logo’; // Path to your view

    if (!$expression)
    {
        $expression = '([])';
    }

    return "<?php echo \$__env->make('{$view}', array_except(get_defined_vars(), ['__data', '__path']))->with{$expression}->render(); ?>";
});
ثبت پرسش جدید

پاسخ‌ها

6
حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

در لینک زیر کامل در خود مستندات لاراول مثال اورده
https://laravel.com/docs/5.7/blade#extending-blade

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

@hesammousavi
مهندس جان اینو مطالع کردم
ولی به درد این کار من نمیخوره
من میخوام یه وردوی رشته بدم
و با استفاده از اون تابع فراخون خروجی یک صفحه html به همراه متنی باشد که قرار در بتن همون html نمایش داده شود

شاید پاسخ شما همین‌جا باشد

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

در واقع این روش شبیه به استفاده از include@ هست
و کدی که شما استفاده کردید, مال مواقعیه که بخواهید آرگمان‌های اضافه هم به ویو پاس بدید.

اما دایرکتیو logo که میخواهید بسازید, آرگمان های اضافه نداره پس خیلی ساده از روش زیر استفاده کنید:

Blade::directive('logo', function($country)
{
    return "<?php echo view({$country}); ?>";
});

و باید داخل resources/views هم فایل iran.blade.php رو داشته باشید و داخل ویو اصلی هم:

@logo('iran')

و حتما کش ویو رو هم پاک کنید تا تغییرات اعمال بشه:

php artisan view:clear
bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

من فک کنم سوال بنده رو متوجه نشدید
من یه فایل html دارم به صورت زیر

<div class="row">
    <div class="col-lg-12"  style="font-family: 'IRANSansWeb';">
        <h1 class="page-header">username</h1>
    </div>
</div>

اینم viewcomposer من

Blade::directive('input', function($expression)
{
    $view = ‘cms.content.forms’;

    if (!$expression)
    {
        $expression = '([])';
    }

    return "<?php echo \$__env->make('{$view}', array_except(get_defined_vars(), ['__data', '__path']))->with{$expression}->render(); ?>";
});

من میخوام مثلن زدم دستور زیر رو هرجای blade خودم

@input(name)

بره اون فایل html ای که بالا نوشتم رو بیاره و بجای username اون nameس که نوشتم رو بیار

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

فایل HTML رو یه جا (partial1.blade.php) ذخیره کن:

<div class="row">
    <div class="col-lg-12"  style="font-family: 'IRANSansWeb';">
        <h1 class="page-header">{{ $username }}</h1>
    </div>
</div>

و از include@ استفاده کن:

@include('partial1', [
    'username' => auth()->user()->name
])

این معادل همون کاره فقط کاستوم دایرکتیو نیست.

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

@ali.bayat
خوب منم دقیقا برعکس چنین چیزی که نوشتید رو میخوام
یعنی کاستوم باشد دایرکتیو من

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام