Loading plugin views. Add a location to look for blades?

sage9
blade

#1

I ask a lot of annoying questions on this forum.

When I build feature plugins for my sites I like to include views with them so I’m not creating too many interdependencies between my theme and plugins.

In the past I’ve used Gamajo Template Loader to let the plugin keep its own views, and let the theme override them, like WooCommerce and other plugins do.

But this method doesn’t work with Blade templates because Sage’s blade functionality isn’t called when Gamajo does its magic.

A solution to this would be to allow Sage’s Blade implementation to accept a path to look for views in the plugin directory. It would check the theme first for an override, and fall back to the plugin path.

It would be easy enough to check for Blade functionality in the plugin before including a view, and besides that I’m much more comfortable having a plugin require Sage9 (any Sage9) than I am requiring specific template files within that Sage9 theme.

So what do you think? Is this possible now? Is it a good feature suggestion if not?

Thanks for reading.


#2

Did you see this section?


#3

I have seen that, and I want to do sort of the reverse. I want the plugin to tell the theme about its views, rather than the other way around.

I guess I could wrap that in a filter and use that, though.

I’ll see if that works. Thanks!


#4

@MWDelaney - Could you share an example of what that might look like? I’m creating some functionality and would like to load a blade template from a specific directory that is not the standard view directory.

Using the code below works great to render a template from the standard directory, but how to I have it look in a custom directory? Ideally allowing for someone to override these in their own theme directory.

$template = 'plugin-views.template.blade.php';
echo \App\template($template);

#5

So I’m just proceeding at the moment with the standard resources/views directory and have found something odd. There’s probably a very simple solution, but I’ve googled and have had no luck.

Basically, I can render an existing template. say

    $template = 'partials.content-events.blade.php';
    echo \App\template($template);

this works fine. however, if I add a new template to the partials directory it says it cannot find the template. I’ve cleared the cache as well. seems very strange as I can include the new partial directly from another template via @include

Any ideas?


#6

Ok. Error on my part by blindly copy and pasting something.

The template names do not need ‘.blade.php’. They only need the dot ‘.’ separated path/filename.

So for the example

$template = 'plugin-views.template';
echo \App\template($template);

I’m really uncertain why the one rendered though.