Search the Community
Showing results for tags 'namespace'.
-
I had upgraded my Apache configuration to include PHP7.2 and PHP7.3 for a Laravel-based script on the same server. Somehow it/I messed up a previously fine Processwire site, in a very confusing way. The site still looks fine, but editing template files has no effect whatsoever. It is stuck on some kind of cached version. I have already disabled PHP7's OPcache, cleared browser caches, etc, with no effect. The pages now apparently come from PW's assets/cache/FileCompiler folder, even though I never enabled template caching for this site. I have tried adding "namespace ProcessWire;" to the top of the homepage template file, but then I get this fatal error: My functions.php file pulls data in from another Processwire installation on the same VPS with the following line: $othersitedata = new ProcessWire('/home/myaccount/public_html/myothersite/site/', 'https://myothersite.com/'); That apparently still works fine; the site still displays data from the other installation, but via the "cached" template that I am now unable to change. I don't know where to start with this mess. Does any of this sound familiar to anyone? Any pointers in the right direction would be much appreciated. Edit: Adding "$config->templateCompile = false;" to config.php results in the same fatal error as above.
- 1 reply
-
- cache
- filecompiler
-
(and 3 more)
Tagged with:
-
Hi All, Fairly new to ProcessWire so apologies if this is a daft question, but I am having a go creating my first module. I have set it up and enabled it as per the docs. However I have created another class within the same module directory, which was going to be used in the main module file but I can't get it to work for the life of me and I believe its due to me not fully understanding the namespace side of things. Example: MyModule.module.php <?php namespace ProcessWire; class MyModule extends WireData implements Module { public static function getModuleInfo() { return array( 'title' => 'Test Module', 'version' => 1, 'summary' => 'Test module', 'href' => '', 'singular' => true, 'autoload' => true, 'icon' => 'exchange', ); } public function newMethod( $testMessage ) { $foo = new Foo($testMessage); $foo->getFoo(); } } Foo.php <?php namespace ProcessWire; class Foo { protected $foo; public function __construct($foo) { $this->foo = $foo; } public function getFoo() { return $this->foo; } } Now as I understand it both these files should exist under the ProcessWire namespace, so in theory I should be able to use Foo within MyModule without any use statements as they both exist at the same level within the ProcessWire namespace? However when I try something like so: $myModule = $modules->getModule('MyModule'); $myModule->myMethod('Foo'); I would have thought this should return 'Foo', however I keep running into errors like: Any help would be appreciated.
-
Hello everyone, Last night as a "saturday night shitty weather stay at home" project I attempted to migrate a project that was on PW 2.7.x to PW 3.x I use a lot of partials on the project so I have around 200 php files that needs to be namespaced. Compiler was giving me trouble with "Call undefined function" errors. Being the lazy developer I attempted to wrote a script after getting bored over pasting the namespace Processwire; line into around 10 files. Below you can find the script, that is very basically adds <?php namespace Processwire;?> as the first line of every .php and .module file in the given directory and shows you the results. Of course it checks for namespace Processwire first By default it assumes ./site/templates folder but I tried it with a module which is giving errors due to namespaces and worked fine. Be careful and remember to take backups first https://gist.github.com/borantula/e41c4b6ba36f78b1110d400a16754691
- 10 replies
-
- 2
-
- processwire 3
- namespace
-
(and 2 more)
Tagged with:
-
I've updated my site's PW version from PW 2.6.x to the latest version. I've updated manually by copying the wire directory and overwriting index.php and .htaccess. When I try and load up the page I'm getting the following error. Error: Call to undefined function Site\wire() (line 5 of /Users/FrancisChung/Sites/Develop/site/templates/php/const/Const.php) My Const.php looks like : namespace Site; require_once(__DIR__."/../../../../index.php"); Define(SITE_DIR, wire(config)->paths->templates); Define(IMG_DIR , wire(config)->urls->templates."img/"); Define(IMG_SQDIR, wire(config)->urls->templates."img/square/"); Define(IMG_SDIR, wire(config)->urls->templates."img/small/"); Define(IMG_MDIR, wire(config)->urls->templates."img/medium/"); Define(IMG_LDIR, wire(config)->urls->templates."img/large/"); Define(IMG_PATH, SITE_DIR."img/"); Define(IMG_SQPATH, SITE_DIR."img/square/"); I'm guessing the wire(config) calls are failing because of the new Namespace implementation? Is there a way of fixing this without having to change every wire(config) or other wire(fnXXX) calls?
- 18 replies
-
- core api
- namespace issues
-
(and 3 more)
Tagged with:
-
Hello, I face interesting issue in PW v3. I have utility class, which is loaded from template. Class is put in namespace due to some naming collisions. But it is impossible now to use translatable strings in it. <?php namespace site\util; class Utils { public function func() { __('car'); // Error - function site\util\__ does not exist. $this->__('car'); // Error - method Utils::__ does not exist. \ProcessWire\__('car'); // Code runs, but PW does not recognize translatable string in admin area. } } I guess that this will not be issue in PHP 5.6 anymore, because you can use... use function ProcessWire\__; But how to deal with it in PHP 5.5? May be I could extend class Utils from some PW class to make $this->__() accessible? I mean... class Utils extends ProcessWire\ClassWithTranslationMethod { public function func() { $this->__('car'); } } Or do you see other solution? Thank you for all your ideas. Martin
- 1 reply
-
- translation
- namespace
-
(and 1 more)
Tagged with:
-
Hello, PW 3 uses namespaces and Composer. I wanted to include https://github.com/vlucas/phpdotenv for having a nice .env file with all my DB settings. On 2.7 I simply included everything in the top of the index.php: // Custom require __DIR__ . '/vendor/autoload.php'; $dotenv = new Dotenv\Dotenv(__DIR__); $dotenv->load(); Now, composer is there so I used "composer require vlucas/phpdotenv" and wanted to use it. The current index.php includes the autoloader via: $composerAutoloader = $rootPath . '/vendor/autoload.php'; // composer autoloader if(file_exists($composerAutoloader)) require_once($composerAutoloader); So after that, I tried to add: // Custom $dotenv = new Dotenv\Dotenv(__DIR__); $dotenv->load(); but the error is: Fatal error: Class 'ProcessWire\Dotenv\Dotenv' not found in /var/www/index.php on line 36 It's because on top of the index, there is <?php namespace ProcessWire; So Dotenv is interpreted like a child of ProcessWire. How can I change this? If interesting, here is my composer.json: { "name": "processwire/processwire", "type": "library", "description": "ProcessWire CMS/CMF", "keywords": [ "cms","cmf", "content management system" ], "homepage": "https://processwire.com", "authors": [ { "name": "Ryan Cramer", "email": "ryan@processwire.com", "homepage": "https://processwire.com", "role": "Developer" } ], "require": { "php": ">=5.3.8", "ext-gd": "*", "vlucas/phpdotenv": "^2.2" }, "autoload": { "files": [ "wire/core/ProcessWire.php" ] } } Thanks for your answers!
-
Hi there, I'm having trouble instantiating a PageArray and was wondering if i've overlooked something very obvious (Won't be the first time!) I've included a snippet of the code The Error I'm getting is "Class 'Site\PageArray' not found". I'm using namespaces as I've had name collisions before. Still stumbling my way through PHP and any guidance would be much appreciate. ---------------------------- G namespace Site; class Data { /** * Wrapper function to return items inside a PageArray. * @param $items * @return PageArray - A PageArray containing all the items passed in */ static function PageArrayWithChildren($items) { //$array = new wire(PageArray); $array = new PageArray(); foreach($items as $item) { $array->import($item->children()); } return $array; } }
- 5 replies
-
- PageArray
- Object Creation
-
(and 2 more)
Tagged with: