bardia
6 سال پیش توسط bardia مطرح شد
6 پاسخ

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

سلام من چطور می تونم چنین چیزی توی 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(); ?>";
});

ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 6 سال پیش مطرح شد
0

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


bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
0

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

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

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

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

@logo('iran')

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

php artisan view:clear

bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
0

من فک کنم سوال بنده رو متوجه نشدید
من یه فایل 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 6 سال پیش مطرح شد
0

فایل 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
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
0

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


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

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