ehren. Posted April 27, 2015 Share Posted April 27, 2015 Just wondering if anyone is able to help convert this 3.x script into 4.x? I use it to send visitors to my "theme demo board" while also assigning a specific theme for them.ie. If a URL like this is clicked: site.com/forums/skinchange.php?id=10, it'll take the visitor to the forum and change their theme id to 10.Version 4 uses a form/buttons for the "Theme changer" rather than a URL, so I was just wondering if anyone with more knowledge than myself is able to help.. The 3.x script is below.<? /** * <pre> * Invision Power Services * IP.Board v3.2.0 * Simple skin change script * Place in your site root directory to send a user to a specified skin * Last Updated: $Date: 2011-03-11 06:59:39 -0500 (Fri, 11 Mar 2011) $ * </pre> * * @author $Author: ips_terabyte $ * @copyright (c) 2001 - 2009 Invision Power Services, Inc. * @license http://www.invisionpower.com/community/board/license.html * @package IP.Board * @link http://www.invisionpower.com * @version $Rev: 8031 $ * */ define( 'IPS_PUBLIC_SCRIPT', 'index.php' ); define( 'IPB_THIS_SCRIPT', 'public' ); require_once( './initdata.php' );/*noLibHook*/ require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/ require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/ $reg = ipsRegistry::instance(); $reg->init(); if ( $_GET['id'] ) { @header("Location: " . str_replace( '&', '&', ipsRegistry::$settings['base_url'] ) . '&settingNewSkin=' . intval( $_GET['id'] ) . '&k=' . $reg->member()->form_hash ); } else { die("No ID passed"); } exit();Thanks to anyone who can help! Link to comment Share on other sites More sharing options...
Marcher Technologies Posted April 27, 2015 Share Posted April 27, 2015 <?php $_SERVER['SCRIPT_FILENAME'] = __FILE__; /** * Path to your IP.Suite directory with a trailing / * Leave blank if in IPS root. */ $path = ''; require_once $path . 'init.php'; if (\IPS\Request::i()->id) { \IPS\Dispatcher\Front::i(); \IPS\Output::i()->redirect( \IPS\Http\Url::internal('app=core&module=system&controller=theme', 'front', 'theme')->setQueryString( array( 'id' => \IPS\Request::i()->id, 'csrfKey' => \IPS\Session::i()->csrfKey ) ) ); } else { die("No ID passed"); } exit();seems to do the trick in testing. Cheers. Link to comment Share on other sites More sharing options...
ehren. Posted April 27, 2015 Author Share Posted April 27, 2015 Thanks for the help.. It works if you simply paste the URL into your address bar and press "go", however if you click the link from a html document, it simply refreshes the page you were viewing and doesn't take you to the forum. <a href="http://www.site.com/theme.php?id=6">Click here</a> Link to comment Share on other sites More sharing options...
Marcher Technologies Posted April 27, 2015 Share Posted April 27, 2015 I see. it is changing the skin, it's just sending them exactly back to where they came. Different approach seems to have it.<?php $_SERVER['SCRIPT_FILENAME'] = __FILE__; $path = ''; $_GET['app'] = 'core'; $_GET['module'] = 'system'; $_GET['controller'] = 'theme'; require_once $path . 'init.php'; if (\IPS\Request::i()->id) { $_SERVER['HTTP_REFERER'] = ''; $disp = \IPS\Dispatcher\Front::i(); \IPS\Request::i()->csrfKey = \IPS\Session::i()->csrfKey; $disp->run(); } else { die("No ID passed"); } exit(); Link to comment Share on other sites More sharing options...
ehren. Posted April 27, 2015 Author Share Posted April 27, 2015 Perfect, that works! Thanks so much for the help - much appreciated! Link to comment Share on other sites More sharing options...
OsmanK Posted September 7, 2016 Share Posted September 7, 2016 On 28.04.2015 at 1:27 AM, Marcher Technologies said: I see. it is changing the skin, it's just sending them exactly back to where they came. Different approach seems to have it. <?php $_SERVER['SCRIPT_FILENAME'] = __FILE__; $path = ''; $_GET['app'] = 'core'; $_GET['module'] = 'system'; $_GET['controller'] = 'theme'; require_once $path . 'init.php'; if (\IPS\Request::i()->id) { $_SERVER['HTTP_REFERER'] = ''; $disp = \IPS\Dispatcher\Front::i(); \IPS\Request::i()->csrfKey = \IPS\Session::i()->csrfKey; $disp->run(); } else { die("No ID passed"); } exit(); Hello; I'm having a problem with this code. There is also a report on it. Can you help with this? Thanks for your help. Link to comment Share on other sites More sharing options...
teraßyte Posted September 7, 2016 Share Posted September 7, 2016 Try replacing: $disp = \IPS\Dispatcher\Front::i(); with this: $disp = \IPS\Dispatcher\External::i(); They added a new external dispatcher for such things in 4.1.14. I haven't tested the change but that's probably the issue. Link to comment Share on other sites More sharing options...
OsmanK Posted September 7, 2016 Share Posted September 7, 2016 Thank you so much. Link to comment Share on other sites More sharing options...
teraßyte Posted September 7, 2016 Share Posted September 7, 2016 You're welcome Link to comment Share on other sites More sharing options...
Brogan Posted December 18, 2017 Share Posted December 18, 2017 On 28.04.2015 at 1:27 AM, Marcher Technologies said: I see. it is changing the skin, it's just sending them exactly back to where they came. Different approach seems to have it. <?php $_SERVER['SCRIPT_FILENAME'] = __FILE__; $path = ''; $_GET['app'] = 'core'; $_GET['module'] = 'system'; $_GET['controller'] = 'theme'; require_once $path . 'init.php'; if (\IPS\Request::i()->id) { $_SERVER['HTTP_REFERER'] = ''; $disp = \IPS\Dispatcher\Front::i(); \IPS\Request::i()->csrfKey = \IPS\Session::i()->csrfKey; $disp->run(); } else { die("No ID passed"); } exit(); With this method, can a product in the store be added directly to the card? How do I follow a path to do this? Thank you in advance for your help. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.