Partial in layout error - php

So this is my project directory structure:
application/
layouts/
scripts/
default.phtml
partials/
partial.phtml
modules/
default/
controllers/
models/
forms/
views/
scripts/
public/
In the default.phtml layotu I'm trying to include a partial like this:
<?php echo $this->partial('partials/partial.phtml', array()); ?>
Which is getting me this error:
script 'partials/partial.phtml' not found in path (...)
Does that mean partials can be included only from within view scripts? I could put the partial inside modules/default/views directory but that seems wrong because in case there are more modules the same partial file would repeat itself multiple times.

partials will be loaded from the views/scripts directory not from the layouts/scripts directory also when beeing called from the layout viewscriopt.
if you really need to have your partials in the layout folder you need to configure a new view object with the scriptPath pointing to your layouts/scripts dir. instead you can maybe find an existing view object in the layout internals which already has this path set.
then simply call the partial viewhelper on this view object.

Related

Yii2 How can I route the current Url to controller outside the root path of the current project?

I have 2 websites projects on the main directory inside /var/www/ directory
what I want to do is creating controller with it's views to be shared between the 2 project, not repeat the same controller on both projects,
now I create it ex. myController.php inside host A
How can I access the controller from the second host B ?
and render myaction function?
the url rules in the main.php config file
'newpage/list'=>'myController/myaction',
Edit :: I'm using this advanced template
**DIRECTORY STRUCTURE**
common
config/ contains shared configurations
mail/ contains view files for e-mails
models/ contains model classes used in both backend and frontend
tests/ contains tests for common classes
console
config/ contains console configurations
controllers/ contains console controllers (commands)
migrations/ contains database migrations
models/ contains console-specific model classes
runtime/ contains files generated during runtime
backend
assets/ contains application assets such as JavaScript and CSS
config/ contains backend configurations
controllers/ contains Web controller classes
models/ contains backend-specific model classes
runtime/ contains files generated during runtime
tests/ contains tests for backend application
views/ contains view files for the Web application
web/ contains the entry script and Web resources
frontend
assets/ contains application assets such as JavaScript and CSS
config/ contains frontend configurations
controllers/ contains Web controller classes
models/ contains frontend-specific model classes
runtime/ contains files generated during runtime
tests/ contains tests for frontend application
views/ contains view files for the Web application
web/ contains the entry script and Web resources
widgets/ contains frontend widgets
vendor/ contains dependent 3rd-party packages
environments/ contains environment-based overrides
Question is : How I can access the front end controllers in front end directory from backend rules ?
Frontend and Backed are two different modules. When they are bootstrapping from index.php they behave like two individual projects. So, you cannot route from frontend to backed or vise versa using urlManager of Yii.
May be you can maintain some params in common/params where you can configure absolute Url.
Actually you can reuse frontend controller classes in backend - you can use controllerMap property of application or module to define custom controller classes. For example if you add something like this to your backend config:
'controllerMap' => [
'mycontroller' => 'frontend\controllers\SomeController',
],
Then frontend\controllers\SomeController will act like it would be backend\controllers\MycontrollerController - backend.local/mycontroller will use the same controller as frontend.local/some, but with different contexts (and probably layouts).
You can even use controllerNamespace to load all controllers from given namespace. For example create separate module in backend:
namespace backend\modules;
class FrontendModule extends \yii\base\Module {
public $controllerNamespace = 'frontend\controllers';
}
Then this module will use all frontend controllers at backend context. backend.local/frontend/some will use frontend\controllers\SomeController.

Trying to load theme assets in pyrocms only using template and asset library

In trying to find out how to have the following work. I'm using the template and asset libraries from PyroCMS to help in aiding my CI application and I’m trying to figure out how I can have the dashboard look for the images/css/js files in the file structure below as opposed to the regular assets folder in the public_html folder since those files only pertain to that theme. As far as I know the code below is what is used to render a specific css file. The theme is running smoothly but when the line below gets called it renders nothing as if there is no code line present.
I'm still trying to find out why the line isn't getting rendered. I'm still needing an idea for this.
<?php echo Asset::css(‘bootstrap/bootstrap.min.css’); ?>
public_html/
application/
themes/
supr/
assets/
js/
images/
css/
bootstrap/bootstrap.min.css
views/
layouts/
default.php
Asset::css() only adds the file you want to include into a list (array) of CSS files. You need to call Asset::render_css() to generate the actual <link> HTML.
http://docs.pyrocms.com/2.1/manual/developers/tools/assets

How to get the config directory of a plugin in Symfony?

Is there a function like $pluginsDir = sfConfig::get('sf_config_dir'); (which returns configuration directory for overall) to get directory of the specific plugin.
Lets say I have directory structure something like:
project/
config/
plugins/
myplugin/
config/
I want to get output /home/user_name/public_html/project/plugins/myplugin/config/
Symfony is shipped with a sf_plugins_dir which goes to /home/user_name/public_html/project/plugins but that's all.
Solutions (which are almost the same) are :
1. build the path based on this config variable:
sfConfig::get('sf_plugins_dir').DIRECTORY_SEPARATOR.'myplugin'.DIRECTORY_SEPARATOR.'config';
2. give it as myplugin config
In myplugin/config/app.yml:
all:
myplugin:
config_dir: %SF_PLUGINS_DIR%/myplugin/config
Then:
sfConfig::get('app_myplugin_config_dir');

Zend Framework - Override module

I'm working on multi-website CMS in Zend Framework.
I've came to a point where I need to override module from application/ folder in my website/application folder.
A bit better explanation of my issue:
Here's tree of my application (important part):
library/
application/
module1/
controllers/
models/
....
module2/
controllers/
models/
....
websites/
website1.com/
application/
module1/
controllers/
models/
....
So what I need to do is that module1/ in websites/website1.com/application/ override module1/ in application, IF it exists. I want everything in module1/ in websites folder to override everything in main application folder.
I'd also like if there are 2 controllers in this module1 (for example IndexController and TestController) and if I put only TestController in websites folder under module1/controllers to override ONLY TestController from Application folder and to get IndexController from main folder.
Sorry if I failed to explain exactly what I'm trying to achieve. If there's something unclear, please ask.
Thank you.
Edit:
Okey, first of all - thanks for your comments.
Reason for having websites/ folder is, mostly because of vhost as I prefer that all of my websites have separate (public?) folders, and reason for having one library with application folder is because, obviously, upgrade reasons (so when I, for example, upgrade Zend - I don't need to upgrade it for every website).
I'll most likely rarely use overriding option for controllers, and yes, I'd even prefer if I could, for example, extend main Controller (for example - IndexController) and override some functions, but I thought that's way harder then override whole class.
Here's full structure of my application:
library/ - Library folder contains Zend and many other classes that I'll use in my application.
Zend - Zend Framework
MyCMS - Classes from my old CMS.
sites/ - Folder that contains websties.
website_1 - Website one.
application/ - Application folder for website one. If I need to redefine module or something. So, if I need to override module: main_module, I'll create folder main_module here with files that I want to override.
config/ - Configuration for website_1 - if I need to override, for example, application.ini
lang/ - Language files for this specific website.
templates/ - Templates folder for website (layouts and templates). By the way, I'm using smarty.
default/ - Main template.
layout/ - Layouts for Zend View.
css/
js/
images/
modules/
files/ - Place to upload files in, for this website. This will contain user avatars and stuff.
index.php - Main file that runs bootstrap and application.
Bootstrap.php - Inherited bootstrap. In case I need to override some functions from default bootstrap.
application/ - Main folder that contains application modules and stuff.
main_module/
configs/ - Module configuration.
config.ini
controllers/ - Controllers for this module.
modules/ - Submodules. There are like boxes that I display on website. For example, if my main module is "news", here, I'll make new sub-module to display box with statistics.
submodule/
services/ - XML/JSON/whatever service. If someone targets controller in services with specific parametars, it'll return response in requested format.
controllers/ - Services will only have controllers.
configs/ - Configuration for this submodule.
controllers/ - Controllers for this submodule.
models/ - Models for this submodule.
lang/ - Language files for this submodule.
template/ - Templates for this submodule.
helpers/
css/
js/
images/
index.html
models/ - Models for main module.
lang/
services/ - Main module will also have services. See submodule services for explanation.
controllers/
template/
helpers/
css/
js/
images/
index.html
Bootstrap.php - This is main bootstrap file that every website's bootstrap file will extend (and override some methods - if needed).
Update
Even though I highly discourage your directory structure, it's your application and you should structure it however you like.
To load multiple controllers, you should create a Front Controller Plugin to add paths to the controller directories stack
class My_Controller_Plugin_Paths extends Zend_Controller_Plugin_Abstract
{
public function preDispatch()
{
// Something like this...
// Would be best to load paths via config/database or somewhere
$dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
$dispatcher->addControllerDirectory('/path/to/website1.com/controllers')
->addControllerDirectory('/path/to/website2.com/controllers');
}
}
This is entirely untested, but you get the idea. Just make sure you register the plugin with the Front Controller in you bootstrap
I'd agree with #Laykes. This is a badly structured application.
I'm not sure of your exact requirements, but if it were my application, I would try to structure it like this:
/application
/modules
/default
/controllers
/IntexController.php // Default_IndexController
/Website1com
/IndexController.php // Default_Website1com_IndexController (possibly extends Default_IndexController)
Here you can see a properly structured class inheritance without creating totally separate, and probably duplicate, application folder.
Autoloading anything like this though totally depends on you and your priorities. You could do a number of things, each with their own +ve's and -ve's.
You could throw all paths into your include_paths in the order you want
Check files exist and load from a front controller plugin
To name a couple.

In Zend/MVC how do I set up the controllers and views for a sub-application or submodule?

I have all my zend applications like this
/app/
/app/registration
/app/games
I need to create a URL for games like this
mydomain.com/games/game-1
How do I set up the controllers and views in this directory structure when its like a module or sub application?
/app/games
/app/games/configs
/app/games/controllers
/app/games/controllers/Game1Controller.php
/app/games/views
...
One way would be to use the existing module conventions:
application/
controllers/
views/
configs/
modules/
registration/
controllers/
views/
configs/
The good thing about this is that ZF is already set up to handle this to some extent by convention... If you do it another way you are going to have to modify things more.
In this layout the top level controllers, views, etc.. are the Default module, while all other modules are under the modules directory.
I would also make each game its own module. If you have common code used in all games make classes you can extend and put those in your library.
You can also use zf tool zf.sh create module yourModuleName to create the default directory structure for modules.

Categories