راکت
bardia
bardia
7 سال پیش توسط 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(); ?>";
});

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

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


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

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


علی بیات
علی بیات
تخصص :توسعه دهنده ارشد وب
@ali.bayat7 سال پیشمطرح شد
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
bardia
تخصص :Golang/Laravel
@mrbardia727 سال پیشمطرح شد
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.bayat7 سال پیشمطرح شد
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
bardia
تخصص :Golang/Laravel
@mrbardia727 سال پیشمطرح شد
0

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


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

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