Помогите переехать с 2,5 на 3 мучаюсь уже не один день. Скрин с полным описание прикладываю. Если кто может помочь посмотрите скрин помогите обновится
Ну да не скрин. Просто скринами получилось бы очень много картинок по этому и pdf файл экспортировал. Так думаю удобнее что тут и скрины и описание в одном месте
смотри откуда производится вызов сласса JModel и перед его вызовом пиши: Код (PHP): if (!class_exists('JModel')) { /*тут определение переменной класса и его NEW*/ } в строке 39 пиши: Код (PHP): $this->input = JFactory::getApplication()->input; а вообще у тебя обновление о-о-о-о-о-о-о-очень криво прошло, половина файлов получается остались от J2.5 и почитай это Планирование мини-миграции - с Joomla 2.5 на 3.х
Все перерыл в этом файле но так и не нашел if(!class_exists('JModel')) есть только в самом начале abstract class JModel extends JObject Спойлер: вот весь файл Код (PHP): <?php /** * @package Joomla.Platform * @subpackage Application * * @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE */ defined('JPATH_PLATFORM') or die; /** * Base class for a Joomla Model * * Acts as a Factory class for application specific objects and * provides many supporting API functions. * * @package Joomla.Platform * @subpackage Application * @since 11.1 */ abstract class JModel extends JObject { /** * Indicates if the internal state has been set * * @var boolean * @since 11.1 */ protected $__state_set = null; /** * Database Connector * * @var object * @since 11.1 */ protected $_db; /** * The model (base) name * * @var string * @note Replaces _name variable in 11.1 * @since 11.1 */ protected $name; /** * The URL option for the component. * * @var string * @since 11.1 */ protected $option = null; /** * A state object * * @var string * @note Replaces _state variable in 11.1 * @since 11.1 */ protected $state; /** * The event to trigger when cleaning cache. * * @var string * @since 11.1 */ protected $event_clean_cache = null; /** * Add a directory where JModel should search for models. You may * either pass a string or an array of directories. * * @param mixed $path A path or array[sting] of paths to search. * @param string $prefix A prefix for models. * * @return array An array with directory elements. If prefix is equal to '', all directories are returned. * * @since 11.1 */ public static function addIncludePath($path = '', $prefix = '') { static $paths; if (!isset($paths)) { $paths = array(); } if (!isset($paths[$prefix])) { $paths[$prefix] = array(); } if (!isset($paths[''])) { $paths[''] = array(); } if (!empty($path)) { jimport('joomla.filesystem.path'); if (!in_array($path, $paths[$prefix])) { array_unshift($paths[$prefix], JPath::clean($path)); } if (!in_array($path, $paths[''])) { array_unshift($paths[''], JPath::clean($path)); } } return $paths[$prefix]; } /** * Adds to the stack of model table paths in LIFO order. * * @param mixed $path The directory as a string or directories as an array to add. * * @return void * * @since 11.1 */ public static function addTablePath($path) { jimport('joomla.database.table'); JTable::addIncludePath($path); } /** * Create the filename for a resource * * @param string $type The resource type to create the filename for. * @param array $parts An associative array of filename information. * * @return string The filename * * @since 11.1 */ protected static function _createFileName($type, $parts = array()) { $filename = ''; switch ($type) { case 'model': $filename = strtolower($parts['name']) . '.php'; break; } return $filename; } /** * Returns a Model object, always creating it * * @param string $type The model type to instantiate * @param string $prefix Prefix for the model class name. Optional. * @param array $config Configuration array for model. Optional. * * @return mixed A model object or false on failure * * @since 11.1 */ public static function getInstance($type, $prefix = '', $config = array()) { $type = preg_replace('/[^A-Z0-9_\.-]/i', '', $type); $modelClass = $prefix . ucfirst($type); if (!class_exists($modelClass)) { jimport('joomla.filesystem.path'); $path = JPath::find(self::addIncludePath(null, $prefix), self::_createFileName('model', array('name' => $type))); if (!$path) { $path = JPath::find(self::addIncludePath(null, ''), self::_createFileName('model', array('name' => $type))); } if ($path) { require_once $path; if (!class_exists($modelClass)) { JError::raiseWarning(0, JText::sprintf('JLIB_APPLICATION_ERROR_MODELCLASS_NOT_FOUND', $modelClass)); return false; } } else { return false; } } return new $modelClass($config); } /** * Constructor * * @param array $config An array of configuration options (name, state, dbo, table_path, ignore_request). * * @since 11.1 */ public function __construct($config = array()) { // Guess the option from the class name (Option)Model(View). if (empty($this->option)) { $r = null; if (!preg_match('/(.*)Model/i', get_class($this), $r)) { JError::raiseError(500, JText::_('JLIB_APPLICATION_ERROR_MODEL_GET_NAME')); } $this->option = 'com_' . strtolower($r[1]); } // Set the view name if (empty($this->name)) { if (array_key_exists('name', $config)) { $this->name = $config['name']; } else { $this->name = $this->getName(); } } // Set the model state if (array_key_exists('state', $config)) { $this->state = $config['state']; } else { $this->state = new JObject; } // Set the model dbo if (array_key_exists('dbo', $config)) { $this->_db = $config['dbo']; } else { $this->_db = JFactory::getDbo(); } // Set the default view search path if (array_key_exists('table_path', $config)) { $this->addTablePath($config['table_path']); } elseif (defined('JPATH_COMPONENT_ADMINISTRATOR')) { $this->addTablePath(JPATH_COMPONENT_ADMINISTRATOR . '/tables'); } // Set the internal state marker - used to ignore setting state from the request if (!empty($config['ignore_request'])) { $this->__state_set = true; } // Set the clean cache event if (isset($config['event_clean_cache'])) { $this->event_clean_cache = $config['event_clean_cache']; } elseif (empty($this->event_clean_cache)) { $this->event_clean_cache = 'onContentCleanCache'; } } /** * Gets an array of objects from the results of database query. * * @param string $query The query. * @param integer $limitstart Offset. * @param integer $limit The number of records. * * @return array An array of results. * * @since 11.1 */ protected function _getList($query, $limitstart = 0, $limit = 0) { $this->_db->setQuery($query, $limitstart, $limit); $result = $this->_db->loadObjectList(); return $result; } /** * Returns a record count for the query * * @param string $query The query. * * @return integer Number of rows for query * * @since 11.1 */ protected function _getListCount($query) { $this->_db->setQuery($query); $this->_db->execute(); return $this->_db->getNumRows(); } /** * Method to load and return a model object. * * @param string $name The name of the view * @param string $prefix The class prefix. Optional. * @param array $config Configuration settings to pass to JTable::getInstance * * @return mixed Model object or boolean false if failed * * @since 11.1 * @see JTable::getInstance */ protected function _createTable($name, $prefix = 'Table', $config = array()) { // Clean the model name $name = preg_replace('/[^A-Z0-9_]/i', '', $name); $prefix = preg_replace('/[^A-Z0-9_]/i', '', $prefix); // Make sure we are returning a DBO object if (!array_key_exists('dbo', $config)) { $config['dbo'] = $this->getDbo(); } return JTable::getInstance($name, $prefix, $config); } /** * Method to get the database driver object * * @return JDatabase */ public function getDbo() { return $this->_db; } /** * Method to get the model name * * The model name. By default parsed using the classname or it can be set * by passing a $config['name'] in the class constructor * * @return string The name of the model * * @since 11.1 */ public function getName() { if (empty($this->name)) { $r = null; if (!preg_match('/Model(.*)/i', get_class($this), $r)) { JError::raiseError(500, JText::_('JLIB_APPLICATION_ERROR_MODEL_GET_NAME')); } $this->name = strtolower($r[1]); } return $this->name; } /** * Method to get model state variables * * @param string $property Optional parameter name * @param mixed $default Optional default value * * @return object The property where specified, the state object where omitted * * @since 11.1 */ public function getState($property = null, $default = null) { if (!$this->__state_set) { // Protected method to auto-populate the model state. $this->populateState(); // Set the model state set flag to true. $this->__state_set = true; } return $property === null ? $this->state : $this->state->get($property, $default); } /** * Method to get a table object, load it if necessary. * * @param string $name The table name. Optional. * @param string $prefix The class prefix. Optional. * @param array $options Configuration array for model. Optional. * * @return JTable A JTable object * * @since 11.1 */ public function getTable($name = '', $prefix = 'Table', $options = array()) { if (empty($name)) { $name = $this->getName(); } if ($table = $this->_createTable($name, $prefix, $options)) { return $table; } JError::raiseError(0, JText::sprintf('JLIB_APPLICATION_ERROR_TABLE_NAME_NOT_SUPPORTED', $name)); return null; } /** * Method to auto-populate the model state. * * This method should only be called once per instantiation and is designed * to be called on the first call to the getState() method unless the model * configuration flag to ignore the request is set. * * @return void * * @note Calling getState in this method will result in recursion. * @since 11.1 */ protected function populateState() { } /** * Method to set the database driver object * * @param JDatabase &$db A JDatabase based object * * @return void * * @since 11.1 */ public function setDbo(&$db) { $this->_db = &$db; } /** * Method to set model state variables * * @param string $property The name of the property. * @param mixed $value The value of the property to set or null. * * @return mixed The previous value of the property or null if not set. * * @since 11.1 */ public function setState($property, $value = null) { return $this->state->set($property, $value); } /** * Clean the cache * * @param string $group The cache group * @param integer $client_id The ID of the client * * @return void * * @since 11.1 */ protected function cleanCache($group = null, $client_id = 0) { // Initialise variables; $conf = JFactory::getConfig(); $dispatcher = JDispatcher::getInstance(); $options = array( 'defaultgroup' => ($group) ? $group : (isset($this->option) ? $this->option : JRequest::getCmd('option')), 'cachebase' => ($client_id) ? JPATH_ADMINISTRATOR . '/cache' : $conf->get('cache_path', JPATH_SITE . '/cache')); $cache = JCache::getInstance('callback', $options); $cache->clean(); // Trigger the onContentCleanCache event. $dispatcher->trigger($this->event_clean_cache, $options); } }
как определить в каком файле она используется ведь больше ошибок или путей нет да и консоль отладки не включается
запускаешь в какой либо IDE на локалке свой сайт в режиме отладки и смотришь при переходе/вызове откуда (в данный класс) произошла ошибка или ещё вариант, но он менее понятный, включаешь отображение вообще всех ошибок в php и.... и потом отслеживаешь в появившихся ошибках откуда были произведены вызовы P.S. но лучше (моё мнение) просто установить чистую J3.4 и поставить на неё все использовавшиеся компоненты/модули/плагины, потом останется только перетащить части (или целиком) таблицы с данными и настройками
Буду пробовать --- добавлено: 20.10.2015, первое сообщение размещено: 20.10.2015 --- Если прописать так Код (PHP): RedirectHelper::addSubmenu($this->input->get('view', 'links')); $this->input = JFactory::getApplication()->input; в \administrator\components\com_redirect\controller.php on line 40 все ровно выдает ошибки как правильно надо прописывать
на хрена, надо было прописывать получение класса после его использования? я смотрел на твою ошибку и там ошибка была в строке 40. по этому я указал строку 39 (т.е. до момента использования), это же всё плавающие цифры! зачем понимать всё так буквально? если бы у меня данное использование было бы в строке №5112 и я бы указал строку №5111, ты бы у себя так же бы сделал (стал бы искать не существующую строку!) в этом файле \administrator\components\com_content\controller.php в строке №37 в J2.5 вообще комментарий (// Load the submenu.) в том же месте в J3.4 использование класса ($view = $this->input->get('view', 'articles') думай!
Вот com_content\controller.php Код (PHP): $view = $this->input->get('view', 'articles'); $layout = $this->input->get('layout', 'articles'); $id = $this->input->getInt('id'); Вот com_redirect\controller.php Код (PHP): RedirectHelper::addSubmenu($this->input->get('view', 'links')); $view = $this->input->get('view', 'links'); $layout = $this->input->get('layout', 'default'); $id = $this->input->getInt('id'); Что менять надо где не понятно все меню не работает либо 404 либо на контролеры ругается
Перезалей файлы на хостинге,файлами с архива Джумла 3.4.4. Потом менеджер расширений- Поиск,и устанавливаешь системные расширения
перед первой строкой в обоих случаях вставить кусок кода предложенный мной P.S. первая строка не в тех файлах, а тут строка №1 - перед ней
Да вот это $this->input= JFactory::getApplication()->input; помогло спасибо но тут еще одна проблема нарисовалась теперь меню срабатывает но первый пункт выдает такую ошибку Fatal error: Call to undefined method JStringNormalise::fromCamelCase() in\components\com_config\view\cms\html.php on line 210 при переходе в общие настройки в панели html.php Код (PHP): $lastPart = substr($classname, $viewpos + 4); $pathParts = explode(' ', JStringNormalise::fromCamelCase($lastPart)); // 210 строка [/B]
Установил joomla 3 и virtuemart 3 перенес фото перенес меню с старой базы и все таблицы virtuemart сайт заработал и переходы по меню переходит нормально но есть проблема с карточкой товара при переходе в карточку товара выдает ошибку таблиц Код (sql): 1064 - You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'С днем Независимости" 210-105" ORDER BY product_price DESC LI' at line 1 SQL=SELECT p.`virtuemart_product_id`, `l`.`product_name` FROM `subdomaincard_virtuemart_products` AS p INNER JOIN `subdomaincard_virtuemart_products_ru_ru` AS l USING (`virtuemart_product_id`) LEFT JOIN `subdomaincard_virtuemart_product_shoppergroups` AS ps ON p.`virtuemart_product_id` = `ps`.`virtuemart_product_id` LEFT JOIN `subdomaincard_virtuemart_product_categories` AS pc ON p.`virtuemart_product_id` = `pc`.`virtuemart_product_id` LEFT JOIN `subdomaincard_virtuemart_product_prices` AS pp ON p.`virtuemart_product_id` = pp.`virtuemart_product_id` WHERE ( `pc`.`virtuemart_category_id` = 162 AND ( `ps`.`virtuemart_shoppergroup_id`= "2" OR `ps`.`virtuemart_shoppergroup_id` IS NULL ) AND p.`published`="1" ) AND p.`virtuemart_product_id`!="666" AND product_price <= "Открытка "С днем Независимости" 210-105" ORDER BY product_price DESC LIMIT 1 что это за ошибка ведь эти таблицы в базе есть --- добавлено: 26.10.2015, первое сообщение размещено: 26.10.2015 --- пробовал в sql файле в этих таблицах удалять Код (PHP): DEFAULT CHARSET=utf8 и менять Код (PHP): ENGINE=MyISAM на Код (PHP): TYPE=MyISAM Установил Joomla 3 VirtueMart 3.0.10
в ошибке всё написано: прямо конкретно, какой то косяк с кавычками я так понимаю что слова С ДНЁМ НЕЗАВИСИМОСТИ должны быть в кавычках двойных, но полностью всё предложение то же заключено в двойные кавычки и это КОСЯК специально для экранирования есть функция БД $db->quote({а тут переменная или текст}) после обработки этой функцией все внутренние кавычки будут экранированы