Real estate point - Real estate agency portal system

# Real estate point

## Real estate agency portal system

- created: 01/06/2014
- latest update: 05/28/2015
- by: sanljiljan
- iwinter.com.hr/support/

Thank you for purchasing my application. If you have any questions that are beyond the scope of this help file, please feel free to check rich knowledge base with many tips & tricks or submit support ticket on website: http://iwinter.com.hr/support/. Thanks so much!

### Quick start guide

1. Create empty MySQL database with utf8_unicode_ci charset
2. Please extract archive and copy all files & folders to your web server "www" directory.
   If you using Cpanel faster way is to upload zip on server via file manager and extract directly on server
3. Open web server public url and configuration will appear.
4. Enter database name, username, password.
5. Click on "Save" and you will get login and links info (Please save this info because it's unique).

### Working modes

Applications supports 2 modes:

- cms
  Content management, with all functionality
- demo
  With all changes disabled

After first configuration, you can change mode in "application/config/cms_config.php", variable $config['app_type'].

### Server requirements

PHP version 5.2 or newer

MySQL (4.1+)

### Custom database configuration

If you want to change database, you can found configuration in "/application/config/production/database.php".

    // Examples: default, mysql
    $active_group = 'mysql';

    $db['mysql']['hostname'] = 'localhost';
    $db['mysql']['username'] = '';
    $db['mysql']['password'] = '';
    $db['mysql']['database'] = '';
    $db['mysql']['dbdriver'] = 'mysql';
    $db['mysql']['dbprefix'] = '';
    $db['mysql']['pconnect'] = FALSE;
    $db['mysql']['db_debug'] = FALSE;
    $db['mysql']['cache_on'] = FALSE;
    $db['mysql']['cachedir'] = '';
    $db['mysql']['char_set'] = 'utf8';
    $db['mysql']['dbcollat'] = 'utf8_general_ci';
    $db['mysql']['swap_pre'] = '';
    $db['mysql']['autoinit'] = TRUE;
    $db['mysql']['stricton'] = FALSE;

MySQL Example is available, but you can change to PostgreSQL or other supported.

Codeigniter supports: MySQL (4.1+), MySQLi, MS SQL, Postgres, Oracle, and ODBC.

More details about database configuration you can find at: http://ellislab.com/codeigniter/user-guide/database/configuration.html

### Translations

Script contains file translation and content translation (saved in database). With each version script supports more translations, in version 1.5.4 12 translations are cooming with script, sometimes few words are not translated (because of version different so should be translated by you).

Many guides and instructions can be found also in knowledge base: http://iwinter.com.hr/support/?s=translate

## Automatic translation via administration:

Login to admin->Settings->languages->Add language->enter for example ‘russian’ and code to for example ‘ru’.

For frontend you can translate files via administration for your langauge:

Admin->Settings->Languages->Translate files for wanted language->frontend_template_lang.php->translate missing fields

*Hint: You can also use auto translation feature (button on top) using Google or MyMemory API

Also can be translated manually via file:
templates\bootstrap2-responsive\language\{wanted_language}\frontend_template_lang.php

For backend you can translate files via administration for your langauge:

Admin->Settings->Languages->Translate files->Translate min. all fields in backend_base_lang.php

Also can be translated manually via file:
application\language\{wanted_language}\backend_base_lang.php

## To translate website content (saved in database):

1. Login to admin
2. Pages->Edit every page->click on tab “your_language” and translate all values
3. Real Estates->Fields->Edit every Field->click on tab “your_language” and translate all values
   *hint: After changes you should edit->save again all your properties, specially for purpose field!
4. Real Estates->Manage->Edit every property->click on tab “your_language” and translate all values

## Manual translation via file editing (old):

If you want to add a new language for backend, it is necessary to copy one of languages folder inside

"/application/language" (just cca. 270 lines to translate) and "/system/language" (* might be already translated)

change folder name and translate the files within the directory.

If you want to add a new language for frontend, it is necessary to copy one of languages folder inside

"/application/language" (can stay in english if you don't need it in backend), "/system/language" (* might be already translated) and "/templates/{theme}/language" (just cca. 40 lines to translate).

change folder name and translate the files within the directory.

And in all "backend_base_lang.php" language files add new language if not exists at line after 27. for example:

    $lang['canadian'] = "Canadian";

In Admin interface add language:

*Hint: System folder might be already translated, Google for "Codeigniter translations"

You can find more about codeigniter translations at: http://ellislab.com/codeigniter/user-guide/libraries/language.html

### Templates

There is example theme available in the directory "/templates/{theme}".

- "page_{template}.php" is used for page templates
- "components/{component}.php" can be used as sub-template part that are used more times
- There is also "property.php", "results.php" and simmilar templates

If you want to customize template will be best to copy and modify one of example templates.

Template language files can be found in "/languages/{language_name}" folder.

Template configuration file can be found in "/config/template_config.php" folder.

How to use?

Application use Standard simple Codeigniter Template Parser Class and alternative PHP syntax, slowly we replacing all pseudo variables with alternative PHP syntax because it's more easier to customize and bit fester:

http://ellislab.com/codeigniter/user-guide/libraries/parser.html

Variable pairs example:

    {slideshow_images}
         <img src="{url}" />
    {/slideshow_images}

And alternative PHP syntax also can be used:

    <?foreach(slideshow_images as $img):?>
         <img src="<?=$img['url']?>" />
    <?endforeach;?>

All about parameters, you will find in next sections. Of course probably there is few hidden parameters or some "tricks" how to fetch something special so take a look into example template files for it.

You can switch theme in Administration interface, Page template can be switched on page editing:

### Page templates

Parameters usable in page_* files.

Standard page parameters:

    {page_id}
    {page_slug}
    {page_navigation_title}
    {page_title}
    {page_keywords}
    {page_description}
    {page_body}
    {page_template}
    {lang_code}
    {page_current_url}
    {homepage_url}
    {ajax_load_url}

Component parameters:

Parameters that represents sub-templates in "/components" folder, for example:

    {template_head}

Language parameters:

Language fields can be entered in "/language/{language}/frontend_template_lang.php" file and used as language parameter, for example:

    {lang_#} // # represents key in PHP array

    // Examples
    {lang_DateASC}
    {lang_DateDESC}
    {lang_Noestates}

* Other # keys can be found in "/language/{language}/frontend_template_lang.php" file.

Slideshow parameters:

    {slideshow_images}
        {num} //returns image num 0,1,2...n
        {first_active} //returns "active" if this is first image
        {url}
    {/slideshow_images}

Settings parameters:

There is standard settings parameter that just return string, {settings_#} and {has_settings_#} that can be used to check if parameter is not empty string.

    {settings_address}
    {settings_gps}
    {settings_email}
    {settings_template}
    {settings_tracking}
    {settings_address_footer}
    {settings_phone}
    {settings_fax}
    {settings_email}

    {has_settings_address} ... {/has_settings_address}
    {has_settings_gps} ... {/has_settings_gps}
    {has_settings_email} ... {/has_settings_email}
    {has_settings_template} ... {/has_settings_template}
    {has_settings_tracking} ... {/has_settings_tracking}

Other widgets and helpers parameters:

    {print_menu} // print main menu
    {print_lang_menu} // print lang menu
    {year} // return year
    {lang_code} // return lang code

First real estates results to show on homepage or other pages:

    {has_no_results}
    Message that no results found
    {/has_no_results}

    {results}
        {thumbnail_url}
        {url} // url to property page
        {address}
        {data}
        {gps}
        {repository_id}
        {is_featured}
        {option_#} // # represents key of option, can be found in Admin->Estates->Options
        {options_name_#} // where each option have #num before name
    {/results}

    {pagination_links} // return pagination links

Real estates for map on top:

    {all_estates_center} // Calculated map center coordinates

    {all_estates}
        {gps} // Coordinates
        {thumbnail_url}
        {address}
        {option_#} // # represents key of option
        {url}
    {/all_estates}

Search form parameters:

    {purpose_rent_active} // return "active" if template filename contains rent
    {purpose_sale_active} // return "active" if template filename contains sale

    {options_name_#} // Option names
    {options_values_#} // Option values for <select><option>

    // # represents key of option, can be found in Admin->Estates->Options
    // where each option have #num before name

    //Usable lang parameters
    {lang_Sale}
    {lang_Rent}
    {lang_CityorCounty}
    {lang_Search}

Agents:

    {all_agents}
        {image_url}
        {name_surname}
        {phone}
        {mail}
        {address}
    {/all_agents}

Page images and documents:

    {has_page_images}
    {page_images}
        {url}
        {filename}
        {thumbnail_url}
    {/page_images}
    {/has_page_images}

    {has_page_documents}
    {page_documents}
        {url}
        {filename}
    {/page_documents}
    {/has_page_documents}

Contact form based on Administration settings:

    {validation_errors}
    {form_sent_message}

    {form_error_firstname} // return "error", usable for error class on input
    {form_value_firstname} // return value for specific input, on validation error

    {form_error_email}
    {form_value_email}

    {form_error_phone}
    {form_value_phone}

    {form_error_message}
    {form_value_message}

    //Other usable
    {has_settings_email} ... {/has_settings_email}
    {page_current_url}

If you want to add more, currently not available data to template you can edit "application/controllers/frontend.php", index method. Just add data to $this->data array and it will be available with {array_key}.

More about tamplates and about codeigniter you can found at CodeIgniter user guide http://ellislab.com/codeigniter/user-guide/libraries/parser.html

### Property template

Parameters usable in property file.

Standard page parameters, based on property data:

    {page_id}
    {page_slug}
    {page_navigation_title}
    {page_title}
    {page_keywords}
    {page_description} // Property description
    {page_body} // Property content
    {page_template}
    {lang_code}
    {page_current_url}
    {homepage_url}
    {ajax_load_url}

    {estate_image_url} // first property image
    {estate_data_gps}
    {estate_data_address}
    {estate_data_id}

Component parameters:

Parameters that represents sub-templates in "/components" folder, for example:

    {template_head}

Language parameters:

Language fields can be entered in "/language/{language}/frontend_template_lang.php" file and used as language parameter, for example:

    {lang_#} // # represents key in PHP array

    // Examples
    {lang_DateASC}
    {lang_DateDESC}
    {lang_Noestates}

* Other # keys can be found in "/language/{language}/frontend_template_lang.php" file.

Slideshow parameters (for property):

    {slideshow_images}
        {num} //returns image num 0,1,2...n
        {first_active} //returns "active" if this is first image
        {url}
    {/slideshow_images}

Settings parameters:

There is standard settings parameter that just return string, {settings_#} and {has_settings_#} that can be used to check if parameter is not empty string.

    {settings_address}
    {settings_gps}
    {settings_email}
    {settings_template}
    {settings_tracking}
    {settings_address_footer}
    {settings_phone}
    {settings_fax}
    {settings_email}

    {has_settings_address} ... {/has_settings_address}
    {has_settings_gps} ... {/has_settings_gps}
    {has_settings_email} ... {/has_settings_email}
    {has_settings_template} ... {/has_settings_template}
    {has_settings_tracking} ... {/has_settings_tracking}

Other widgets and helpers parameters:

    {print_menu} // print main menu
    {print_lang_menu} // print lang menu
    {year} // return year
    {lang_code} // return lang code

Real estates for map on top:

    {all_estates_center} // Calculated map center coordinates

    {all_estates}
        {gps} // Coordinates
        {thumbnail_url}
        {address}
        {option_#} // # represents key of option
        {url}
    {/all_estates}

Search form parameters:

    {options_name_#} // Option names
    {options_values_#} // Option values for <select><option>

    // # represents key of option, can be found in Admin->Estates->Options
    // where each option have #num before name

    //Usable lang parameters
    {lang_Sale}
    {lang_Rent}
    {lang_CityorCounty}
    {lang_Search}

Property images:

    {has_page_images}
    {page_images}
        {url}
        {filename}
        {thumbnail_url}
    {/page_images}
    {/has_page_images}

Enquire form based on agent Administration settings:

    {validation_errors}
    {form_sent_message}

    {form_error_firstname} // return "error", usable for error class on input
    {form_value_firstname} // return value for specific input, on validation error

    {form_error_email}
    {form_value_email}

    {form_error_phone}
    {form_value_phone}

    {form_error_address}
    {form_value_message}

    {form_error_message}
    {form_value_message}

    //Other usable
    {has_settings_email} ... {/has_settings_email}
    {page_current_url}

Property options/amenities:

    {category_options_#}  // # represents key of category option
    {is_checkbox} // if type is checkbox
        {option_value}
        {option_name}
    {/is_checkbox}
    {is_dropdown} // if type is dropdown
        {option_value}
        {option_name}
    {/is_dropdown}
    {is_text} // if type is text
        {option_value}
        {option_name}
    {/is_text}
    {/category_options_#}

    // You can also access directly to option:
    {estate_data_option_#} // # represents key of option

Property agent data:

    {has_agent}
        {agent_name_surname}
        {agent_phone}
        {agent_mail}
        {agent_address}
        {agent_image_url}
    {/has_agent}

If you want to add more, currently not available data to template you can edit "application/controllers/frontend.php", property method. Just add data to $this->data array and it will be available with {array_key}.

More about tamplates and about codeigniter you can found at CodeIgniter user guide http://ellislab.com/codeigniter/user-guide/libraries/parser.html

### Results template

Parameters usable in results file.

Language parameters:

Language fields can be entered in "/language/{language}/frontend_template_lang.php" file and used as language parameter, for example:

    {lang_#} // # represents key in PHP array

    // Examples
    {lang_DateASC}
    {lang_DateDESC}
    {lang_Noestates}

* Other # keys can be found in "/language/{language}/frontend_template_lang.php" file.

Real estates results to show:

    {has_no_results}
    Message that no results found
    {/has_no_results}

    {results}
    {has_view_grid} // for grid view
        {thumbnail_url}
        {url} // url to property page
        {address}
        {data}
        {gps}
        {repository_id}
        {is_featured}
        {option_#} // # represents key of option, can be found in Admin->Estates->Options
        {option_chlimit_#} // character limit for description to show in results
        {options_name_#} // where each option have #num before name
    {/has_view_grid}
    {has_view_list} // for list view
        {thumbnail_url}
        {url} // url to property page
        {address}
        {data}
        {gps}
        {repository_id}
        {is_featured}
        {option_#} // # represents key of option, can be found in Admin->Estates->Options
        {options_name_#} // where each option have #num before name
    {/has_view_list}
    {/results}

    {pagination_links} // return pagination links

View options

    {view_grid_selected} // returns selected if view is grid type, usable for css class
    {view_list_selected} // returns selected if view is list type
    {order_dateASC_selected} // returns selected if dateASC order type is selected, usable for css class
    {order_dateDESC_selected} // returns selected if dateDESC order type is selected, usable for css class

If you want to add more, currently not available data to template you can edit "application/controllers/frontend.php", ajax method. Just add data to $this->data array and it will be available with {array_key}.

More about tamplates and about codeigniter you can found at CodeIgniter user guide http://ellislab.com/codeigniter/user-guide/libraries/parser.html

### Search engine optimizations

If you want best seo principles like just content title in URL, without "index.php" in URI, you need to:

Rename "seo.htaccess" file to ".htaccess".

In "application/config/config.php" change:

$config['index_page'] = 'index.php';

to

$config['index_page'] = '';

Application also support XML sitemap, URL for sitemap: your-domain.com/sitemap.xml

Also don't forget to check in knowledge base for some tricks etc.: http://iwinter.com.hr/support/?s=seo

### Public API & RSS

## RSS feeds are available on link:

URL: your-domain.com/index.php/api/rss/{lang_code}/{limit_properties}/{offset_properties}

## Public JSON API to search data from external application:

Example call: your-domain.com/index.php/api/json/en?

Supported uri parameters, for pagination:
$limit_properties=20
$offset_properties=0
Supported query parameters:
options_hide
v_rectangle_ne=46.3905, 16.8329
v_rectangle_sw=45.9905, 15.999
search={"search_option_smart":"yellow","v_search_option_2":"Apartment"}
Complete example:
index.php/api/json/en/20/0?options_hide&search={"search_option_smart":"cestica"}&v_rectangle_ne=46.3905, 16.8329&v_rectangle_sw=45.9905, 15.999
Example for "from":
{"v_search_option_36_from":"60000"}
Example for indeed value:
{"v_search_option_4":"Sale and Rent"}

## Currently system use JSON AJAX interface for search and pagination:

URL: your-domain.com/index.php/frontend/ajax/{lang_code}/{page_id}/{pagination_offset}

JSON main results:

    {
        print: "HTML for print"
        order: "Order info"
        lang_id: "Language id"
        results: [array of real estates objects]
    }

Real estates object

    {
        id
        gps
        is_featured
        address
        repository_id
        date
        option_#
    }

### Addons & Custom coding

## Addons

Before you start with custom coding you should know that I always building something additional and currently have many modules like:

News/Blog pro
Packages
Booking & availability calender
Ads module
And many more...

Also take a look in my codecanyon portfolio:
http://codecanyon.net/user/sanljiljan/portfolio

Or my services list:

http://iwinter.com.hr/support/?page_id=1870

## Customizations

Knowledge of the CodeIgniter PHP Framework is required.

CodeIgniter is a very simple framework with the best documentation ever seen, so you can easy learn it.

Look at http://ellislab.com/codeigniter/user-guide

You can also change local path in index.php, line 24 to select ENVIRONMENT configuration.

Don't forget to check our rich knowledge base: http://iwinter.com.hr/support/

### Support

Now we have special website made for support, frequency questions for customizations, guides for basic CSS/HTML, tips & tricks etc.: http://iwinter.com.hr/support

If you have any question that are beyond the scope of this help file, please feel free to check our support instructions:

http://codecanyon.net/item/real-estate-agency-portal/6539169/support

### Hosting suggestion

Regarding hosting providers, my scripts are tested on:

And my suggestion if you decide to purchase by other hosting provider, please save your money/time and don’t buy from godaddy, goddady is good for domains but not for hosting because of many configuration limitations!

### Sources and Credits

I've used the following files and services as listed:

1. PHP
2. CodeIgniter
3. jQuery
4. Bootstrap
5. jQuery File Upload
6. Stock.XCHNG (Example images)
7. http://www.flickr.com/photos/daryl_mitchell (Example images)
8. http://www.flickr.com/photos/58842866@N08 (Example images)
9. http://www.flickr.com/photos/pnwra (Example images)
10. The Documenter

Thank you so much for purchasing this application. I'd be glad to help you if you have any questions relating to this app. No guarantees, but I will do my best to help.