#php #arrays #string #prestashop #notice
#php #массивы #строка #prestashop #УВЕДОМЛЕНИЕ
Вопрос:
Я не уверен, разумно ли публиковать обе проблемы в одном вопросе, но давайте попробуем:
Итак, я проверял журнал ошибок моего сервера, и в нем все еще есть два уведомления, оба о «Преобразовании массива в строку в […]».
Первая строка должна быть такой:
$replace = $route['keywords'][$key]['prepend'].$params[$key].$route['keywords'][$key]['append'];
Контекст:
// Build an url which match a route
if ($this->use_routes || $force_routes) {
$url = $route['rule'];
$add_param = array();
foreach ($params as $key => $value) {
if (!isset($route['keywords'][$key])) {
if (!isset($this->default_routes[$route_id]['keywords'][$key])) {
$add_param[$key] = $value;
}
} else {
if ($params[$key]) {
$replace = $route['keywords'][$key]['prepend'].$params[$key].$route['keywords'][$key]['append'];
} else {
$replace = '';
}
$url = preg_replace('#{([^{}]*:)?'.$key.'(:[^{}]*)?}#', $replace, $url);
}
}
$url = preg_replace('#{([^{}]*:)?[a-z0-9_] ?(:[^{}]*)?}#', '', $url);
if (count($add_param)) {
$url .= '?'.http_build_query($add_param, '', 'amp;');
}
}
Второе — это эта строка:
$uri_path = __PS_BASE_URI__.$id_image.($type ? '-'.$type : '').$theme.'/'.$name.'.jpg';
как часть этого:
// legacy mode or default image
$theme = ((Shop::isFeatureActive() amp;amp; file_exists(_PS_PROD_IMG_DIR_.$ids.($type ? '-'.$type : '').'-'.(int)Context::getContext()->shop->id_theme.'.jpg')) ? '-'.Context::getContext()->shop->id_theme : '');
if ((Configuration::get('PS_LEGACY_IMAGES')
amp;amp; (file_exists(_PS_PROD_IMG_DIR_.$ids.($type ? '-'.$type : '').$theme.'.jpg')))
|| ($not_default = strpos($ids, 'default') !== false)) {
if ($this->allow == 1 amp;amp; !$not_default) {
$uri_path = __PS_BASE_URI__.$ids.($type ? '-'.$type : '').$theme.'/'.$name.'.jpg';
} else {
$uri_path = _THEME_PROD_DIR_.$ids.($type ? '-'.$type : '').$theme.'.jpg';
}
} else {
// if ids if of the form id_product-id_image, we want to extract the id_image part
$split_ids = explode('-', $ids);
$id_image = (isset($split_ids[1]) ? $split_ids[1] : $split_ids[0]);
$theme = ((Shop::isFeatureActive() amp;amp; file_exists(_PS_PROD_IMG_DIR_.Image::getImgFolderStatic($id_image).$id_image.($type ? '-'.$type : '').'-'.(int)Context::getContext()->shop->id_theme.'.jpg')) ? '-'.Context::getContext()->shop->id_theme : '');
if ($this->allow == 1) {
$uri_path = __PS_BASE_URI__.$id_image.($type ? '-'.$type : '').$theme.'/'.$name.'.jpg';
} else {
$uri_path = _THEME_PROD_DIR_.Image::getImgFolderStatic($id_image).$id_image.($type ? '-'.$type : '').$theme.'.jpg';
}
}
return $this->protocol_content.Tools::getMediaServer($uri_path).$uri_path;
}
public function getMediaLink($filepath)
{
return $this->protocol_content.Tools::getMediaServer($filepath).$filepath;
}
PHP не моя сильная сторона, поэтому я понятия не имею, что делать :/
Также я нашел несколько других вопросов о преобразовании массива в строковые уведомления, но мне показалось, что вы не можете решить их таким же образом…
Заранее спасибо за любую помощь!
Комментарии:
1. проверьте,
print($route['keywords'][$key]['prepend']);print($params[$key].$route['keywords'][$key]['append'])
что они печатают. Массив или строка? то же самое для второго, а затем вы можете соответствующим образом настроить свой код2. Извините, что спрашиваю, но … как мне это проверить? : D
3. я понятия не имею о prestashop, но перед этой строкой кода (первой), если вы напишете этот приведенный выше код, он может быть на странице или где-нибудь, где вы видите результат.
4. Первый должен создать удобный URL-адрес, я думаю, например: …/de/import/7688-keramik-schiffschale-percy.html
Ответ №1:
Эта ошибка появляется из-за того, что некоторые переменные в этих двух строках должны быть строковыми, но на самом деле они являются массивом.
Вам нужно распечатать все переменные, используемые в этих 2 строках, используя функцию var_dump() PHP, это скажет вам, какие из переменных на самом деле являются массивом, но они должны быть строкой в соответствии с вашим кодом.
На основе выходных данных вам необходимо изменить свой код, чтобы устранить проблему.
Комментарии:
1. Звучит хорошо, но я все равно должен спросить: как мне это сделать? Я создал новый файл с этим кодом, добавил, например, var_dump ($uri_path), но это, похоже, не работает. Извините, но я все еще очень новичок в php: D