У меня есть сайт Prestashop 1.7.
Я хочу добавить в свою базу данных столбец id_public для моих клиентов со случайным идентификатором из 16 символов. Это должно быть создано при регистрации клиента на сайте.
Как мне это сделать?
/**
* Creates a default 16 char long hexdec string
* @param number $length
* @return string
*/
function RandomString( $length = 16 )
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++)
{
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
Ох, ладно. Потому что мне нужен этот id_public для создания страницы профиля для общественности со ссылкой вроде mydomain.com/p/id_public. Что вы думаете ?
Вы можете использовать мой рекомендованный столбец, просто помните, что используйте не более 8 или 16 символов. Никогда не все по соображениям безопасности.






1 / Я рекомендую вам не изменять собственные таблицы Prestashop, а создавать новые.
2 / С помощью хука actionCustomerAccountAdd вы сможете добавить свой ключ для пользователя
public function hookActionSubmitAccountBefore($params) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++)
{
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'tablecustom (id_customer, key_random) VALUES ('.(int)$params['id_customer'].',"'.pSQL($randomString).'")');
}
Привет, спасибо за ответ. Куда мне поместить этот код? Думаю, в classes / customer.php нету?
Нет в модуле custom, и нажмите на модуль на этом крючке
Я думаю, что в этом нет необходимости, у PS есть столбец с именем
secure_keyв таблицеps_customer, вы можете использовать его вместо нового, конечно, это безопасный ключ (как назван столбец), тогда вы не должны использовать его как общедоступный информации, но вы можете без проблем извлечь первые 16 символов, а затем использовать их как общедоступные.