Два уведомления о преобразовании массива в строку (Prestashop)

#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