Swir

Рейтинг
88
Регистрация
19.11.2014
Smirnof:
Хорошо.
Я имел ввиду, что не могу понять, как скрипт узнает, что делать с {$this->config[$nom.'catevideos']}
Ведь если я удалю все и оставлю только

вряд ли все заработает, видимо что-то нужно изменить.
Т.е. как скрипт узнает что вставить в $nom.' и то, что это значение может быть разным, запутался :(

Если вы вызываете getcates('one'), вы передаёте параметр $nom, равный 'one'

Если вы вызываете getcates('two'), вы передаёте параметр $nom, равный 'two' и т.д.

В результате в методе $this->config[$nom.'catevideos'] превращается в

$this->config['onecatevideos'] или $this->config['twocatevideos'] и т.д.

Вот простой примерчик, как это работает


//Три вызова функции write

write('one');
write('two');
write('thre');

function write($nom){

echo $nom.'BBBBBBB';

}

Выведет

'oneBBBBBBB';// для write('one');
'twoBBBBBBB';// для write('two');
'threeBBBBBBB';// для write('thre');

Тоесть, всё делает одна функция (write), а не три (writeone, writetwo, writethree);

Smirnof:
{$this->key} давал ошибку, я заменил на {$this->config["key"]}, верно?

Не могу сообразить где и как изменить это {$this->config[$nom.'catevideos']}

$this->config[$nom.'catevideos'] не надо менять, а вот

$this->url ругаться не будет, поэтому смотрите, получаете вы то, что нужно или нет и если нет, то возможно

придётся заменить $this->url на $this->config["url"];

Просто я не знаю, как вы определяли поля класса и какие там взимосвязи и зависимости

Smirnof:
Спасибо! Теперь начну разбирать то с чего все и началось, буду сокращать youtube class, буду пробовать )
И заменяете вызовы getonecate..., ...gettwocate на getcates('one'), getcates('two') и т.д

Это актуально сейчас для моего кода?

Да. Вы сведёте несколько функций к одной.

Единственное, обратите внимание в методе


protected function getcates($nom){
// Construct URL
$part = "snippet";
$this->url = "https://www.googleapis.com/youtube/v3/search?videoEmbeddable=true&key={$this->key}&part=$part&order=data&maxResults=5&q={$this->config[$nom.'catevideos']}&type=video";
// Get Data
$data = $this->http(TRUE);
foreach ($data->items as $yt) {
$html .= $this->listQueryVideo($yt);
}
return $html;
}

на $this->url и $this->key, как себя поведут и будут ли выскакивать ошибки?

Smirnof:

Вывод в админке заработал после метода тыка, сделал так
<?php echo $config["url"] ?> это верно?
Спасибо!

p.s. вроде работает )

Да, хотел вам это и написать.

переменные вида $this->value заменить на $this->config['value'],

а вида $value на $config['value']

Ну, теперь видите, сколько лишних и ненужных переменных инициализировали


$store = array(

Ну здесь вы собираете в массив для записи в файл. тут не надо


А $_SESSION изменить, но как не знаю

Нет необходимости что-то делать с $_SESSION исходя из сделанных изменений

Smirnof:
Сделал все как вы описали, работает! :)
Единственное в вашем коде


Удалил );
Т.е. там нет $config = array(); Это верно?

Это тоже пришлось снести, выдавало ошибку.

Да, правильно

Smirnof:

Обнаружил неожиданный для меня поворот
Теперь не работает админка :(
Не входит в нее, убрал проверку логина и пароля, админка открылась с пустыми данным, все поля пусты, т.е. она не может подгрузить конфиг файл и/или данные из него.
Видимо надо было раньше об этом упомянуть :(

Смотрите, вы заменили

$settings = unserialize(base64_decode($infotxt));

на

$config = unserialize(base64_decode($infotxt));

и убрали все ненужные инициализации. У вас в коде


if ($_POST['username'] == $admin_username
&& $_POST['password'] == decryptPaswd($admin_password,getEncryptKey())){

и до того, как изменили код было


$admin_username = $settings['admin_username'];
$admin_password = $settings['admin_password'];

но сейчас эти значения хранятся в массиве $config, следовательно нужно заменить


if ($_POST['username'] == $config['admin_username']
&& $_POST['password'] == decryptPaswd($config['admin_password'],getEncryptKey())){

и тогда должно всё заработать. Так и с другими переменными, если ещё не заменили

---------- Добавлено 29.07.2015 в 19:26 ----------

kostyanet:

Короче говоря у автора темы еще нет опыта структуирования данных, обобщения по признакам, по классификации, по MVC. Без всего этого развитие ПО сайта невозможно. Лапша очень быстро сама себя ограничивает.

На лапше набираются опыта ))). Сначала функциональный подход, а потом, когда уже есть некая база, можно браться и за ООП и за MVC

kostyanet:

Да, инвариантом extract() является http://php.net/manual/en/function.compact.php

Там были ненужные инициализации переменных, а так да - удобные функции.

Smirnof:
)))
Ну то есть из settings.txt файла?

В шаблоне, вывожу название категорий

Как по мне, так вы только и понимаете меня :)

А если прописав

$config = unserialize(base64_decode($infotxt))

вместо

$settings = unserialize(base64_decode($infotxt))

и убрав то, на что я указывал

в шаблонах вместо переменных вида

$zerocatename (или $this->zerocatename)

прописать

$config['zerocatename'] (или $this->config['zerocatename']),

то должно работать

Smirnof:
Это совсем мне понятно

Единственное, появился вопрос, куда делось все остальное

$zerocatename = $settings['zerocatename'];
$zerocatesearch = $settings['zerocatesearch'];
$zerocatevideos = $settings['zerocatevideos'];
$zeronumber = $settings['zeronumber'];
$zerosortingresults = $settings['zerosortingresults'];
$onecatename = $settings['onecatename'];
$onecatesearch = $settings['onecatesearch'];
$onecatevideos = $settings['onecatevideos'];
$onenumber = $settings['onenumber'];
$onesortingresults = $settings['onesortingresults'];
и т.д.
как об этом узнает скрипт, если ни в одном из конфигов этого нет?
Из settings.txt файла?

Где вы используете переменные вида $zerocatename?

Ну как нет? ))) Они в $config, полученные отсюда $config = unserialize(base64_decode($infotxt));

Может я не понимаю, как там у вас устроено и морочу вам голову :))))

Smirnof, т.е у вас по сути из представленных вами двух файлов должно получится что-то типа этого

[Дублирую ваши комментарии]

Конфиг панели управления setup/config.php выглядит так,

где setting меняем на $config


<?php

if (file_exists($filename)) {
$infotxt = file_get_contents($filename);
$config = unserialize(base64_decode($infotxt));

} else {
echo "The file configuration file is missing. Please run the setup again";
}

?>

Так выглядит конфиг самой "cms"


<?php
$filename="setup/settings.txt";
include ("setup/config.php");

// Server's timezone for more accurate data
"timezone" => "Russia/Moscow",

// Cache Data - If you notice anomalies, disable this. You should enable this when you get high hits
"cache" => TRUE,

// Enable mode_rewrite? e.g. user/login instead of index.php?a=user/login
"mod_rewrite" => TRUE,

// Enable Compression? Makes your website faster
"gzip" => TRUE,

);

// Include core.php
include ('Core.php');

?>
Smirnof:
Теперь вроде бы понял.
Т.е. подключать в конфиг "cms" - include ("setup/config.php");
нет нужды в таком случае?

В общем буду все пробовать. Спасибо.


p.s. вообще я позже хотел собрать все в одном конфиг файле, возможно то про что вы говорите это и есть.

Вы его подключаете include ("setup/config.php");

Но из него убираете инициализации переменных

$zerocatename = $settings['zerocatename'];

$zerocatesearch = $settings['zerocatesearch'];

$zerocatevideos = $settings['zerocatevideos'];

$zeronumber = $settings['zeronumber'];

$zerosortingresults = $settings['zerosortingresults'];

$onecatename = $settings['onecatename'];

$onecatesearch = $settings['onecatesearch'];

$onecatevideos = $settings['onecatevideos'];

$onenumber = $settings['onenumber'];

$onesortingresults = $settings['onesortingresults'];

..........

$admin_username = $settings['admin_username'];

$admin_password = $settings['admin_password'];

так как у вас уже всё есть в массиве $settings

дальше в конфиге самой "cms"

исключаете объявление и инициализацию массива

$config = array(

// Your Site URL

"url" => "$url",

..............

ЕЩЕ КОД

..............

//Slider

"zerocatename" => "$zerocatename",

"zerocatesearch" => "$zerocatesearch",

"zerocatevideos" => "$zerocatevideos",

"zeronumber" => "$zeronumber",

"zerosortingresults" => "$zerosortingresults",

//Category Home Page Video

"onecatename" => "$onecatename",

"onecatesearch" => "$onecatesearch",

"onecatevideos" => "$onecatevideos",

"onenumber" => "$onenumber",

так как он по сути дублирует $settings

и поскольку вы затем используете переменную $config, то чтобы не переписывать ниже идущий код - вы просто можете написать

$config=$settings;

..............

ЕЩЕ КОД

..............

// Server's timezone for more accurate data

"timezone" => "Russia/Moscow",

PS. если, конечно, я правильно понял в хитросплетениях файлов.


Просто попробуйте прописать, ничего пока не стирая

$config=$settings;

перед
..............

// Server's timezone for more accurate data
"timezone" => "Russia/Moscow",

и проверьте, будет работать как работало или нет
Smirnof:
Может по тому, что сначала нужно получить-декодировать данные из другого конфига, не знаю :(
попробовал $settings['zerocatename']; - вроде не работает.
Еще попробую.

Спасибо!

Ну вот, смотрите вы получили $settings = unserialize(base64_decode($infotxt));

затем у вас

$zerocatename = $settings['zerocatename'];

дальше

$config = array(

........

"zerocatename" => $zerocatename,

т.е почему нельзя сразу сделать

$config = array(

........

"zerocatename" => $settings['zerocatename'],

а исходя из этого там, где потом используете $config['zerocatename'] использовать минуя все вышеприведённые манипуляции сразу $settings['zerocatename'] ?

Ну как в математике, если а=с и в=с, то а=в

Всего: 170