Using nothing else than default page fields (title, abstract, image), you can
create a more complex sitemap with some basic html, css, and typoscript.

Just add a normal "Menu/Sitemap" as a page content, set the type to sitemap.
And add the typoscript below :

The basic requirement was a two column block style of subpages with a
title, and image, and a short description of this page. And it had to be for a
separate section of the website. And, of course, two columns meant left and
right alternating blocks for proper display. Typoscript's optionsplit to the
rescue !

Use your root page "Alternative Navigation Title" and "Title" to add link title
and image ALT text. First could say "Home" as it's a link title and shown in
browsers with hover. "Title" is used as image ATL text.

Code:

lib.logo {10=IMAGE10{# path to your logo file, make sure to have templatePath constant defined,# or just add full path to the file
file={$templatePath}img/logo.png# combining alt text from root page title and it's tq_seo extension prefix
altText.cObject =COA
altText.cObject {# getting page title prefix from tq_seo extension field10=TEXT10.data = levelfield:0,tx_tqseo_pagetitle_prefix
# getting root page title adding it to title prefix20=TEXT20.data = levelfield:0,title
# using notrimwrap to add space before root page title20.noTrimWrap =||}stdWrap.typolink{# links logo to the root page
parameter.data = leveluid:0# getting link title text from nav_title field or page title if empty
title.data = levelfield:0,nav_title // levelfield:0,title}# wrap it all as you like
wrap =<divid="LOGO">|</div>}}

Description:
- the Top Level Object to use is FILES (line 1)
- the references part as shown reads all files from page uid 1 media field
(line 3-7)
- the data line retrieves the attribute publicUrl from every file found
(line 10)

Normally we can use "displayCond" like this: 'displayCond' =>
'FIELD:sys_language_uid:>:0', but it's not enough when I want to filter with
multiple fields. So I make a small change to implement this featue.

How to use:
displayCond =>
FIELD:sys_language_uid:=:1&&FIELD:t_type:=:0||FIELD:sys_language_uid:=:0&&FIELD:t_type:=:1
this means if sys_language_uid=1 and t_type=0, or sys_language_uid=0
and t_type=1, this field will be shown.

Code:

t3lib/class.t3lib_tceforms.phpfunctionisDisplayCondition($displayCond,$row,$ffValueKey=''){$output=FALSE;$tempOr=FALSE;$tempArrayOr=explode("||",$displayCond);foreach($tempArrayOras$tempArrayAnd){//add by bobo$tempArray=explode("&&",$tempArrayAnd);$tempAnd=TRUE;foreach($tempArrayas$displayCondSingle){$parts=explode(':',$displayCondSingle);switch((string)$parts[0]){// Type of condition:case'FIELD':if($ffValueKey){if(strpos($parts[1],'parentRec.')!==FALSE){$fParts=explode('.',$parts[1]);$theFieldValue=$row['parentRec'][$fParts[1]];}else{$theFieldValue=$row[$parts[1]][$ffValueKey];}}else{$theFieldValue=$row[$parts[1]];}switch((string)$parts[2]){case'REQ':if(strtolower($parts[3])=='true'){$output=$theFieldValue?TRUE:FALSE;}elseif(strtolower($parts[3])=='false'){$output=!$theFieldValue?TRUE:FALSE;}break;case'>':$output=$theFieldValue>$parts[3];break;case'<':$output=$theFieldValue<$parts[3];break;case'>=':$output=$theFieldValue>=$parts[3];break;case'<=':$output=$theFieldValue<=$parts[3];break;case'-':case'!-':$cmpParts=explode('-',$parts[3]);$output=$theFieldValue>=$cmpParts[0]&&$theFieldValue<=$cmpParts[1];if($parts[2]{0}=='!'){$output=!$output;}break;case'IN':case'!IN':$output=t3lib_div::inList($parts[3],$theFieldValue);if($parts[2]{0}=='!'){$output=!$output;}break;case'=':case'!=':$output=t3lib_div::inList($parts[3],$theFieldValue);if($parts[2]{0}=='!'){$output=!$output;}break;}break;case'EXT':switch((string)$parts[2]){case'LOADED':if(strtolower($parts[3])=='true'){$output=t3lib_extMgm::isLoaded($parts[1])?TRUE:FALSE;}elseif(strtolower($parts[3])=='false'){$output=!t3lib_extMgm::isLoaded($parts[1])?TRUE:FALSE;}break;}break;case'REC':switch((string)$parts[1]){case'NEW':if(strtolower($parts[2])=='true'){$output=!(intval($row['uid'])>0)?TRUE:FALSE;}elseif(strtolower($parts[2])=='false'){$output=(intval($row['uid'])>0)?TRUE:FALSE;}break;}break;case'HIDE_L10N_SIBLINGS':if($ffValueKey==='vDEF'){$output=TRUE;}elseif($parts[1]==='except_admin'&&$GLOBALS['BE_USER']->isAdmin()){$output=TRUE;}break;case'HIDE_FOR_NON_ADMINS':$output=$GLOBALS['BE_USER']->isAdmin()?TRUE:FALSE;break;case'VERSION':switch((string)$parts[1]){case'IS':$isNewRecord=(intval($row['uid'])>0?FALSE:TRUE);// detection of version can be done be detecting the workspace of the user$isUserInWorkspace=($GLOBALS['BE_USER']->workspace>0?TRUE:FALSE);if(intval($row['pid'])==-1||intval($row['_ORIG_pid'])==-1){$isRecordDetectedAsVersion=TRUE;}else{$isRecordDetectedAsVersion=FALSE;}// New records in a workspace are not handled as a version record// if it's no new version, we detect versions like this:// -- if user is in workspace: always true// -- if editor is in live ws: only true if pid == -1$isVersion=($isUserInWorkspace||$isRecordDetectedAsVersion)&&!$isNewRecord;if(strtolower($parts[2])=='true'){$output=$isVersion;}else{if(strtolower($parts[2])=='false'){$output=!$isVersion;}}break;}break;}if(!$output){$tempAnd=FALSE;}}if($tempAnd){$tempOr=TRUE;}}$output=$tempOr?TRUE:FALSE;return$output;}

By default the RTE in TYPO3 creates <b> and <i> tags which have no semantic
meaning but just represent a visual style. Therefore these tags are considered
deprecated in modern web design, just like the font-tag. People use CSS to
decide if something should be bold or italic. Therefore web developers have
switched to strong and em tags which do have a semantic meaning.
Put the following in your TS Setup to convert <b> and <i> tags to <strong>
and <em>
Read more : https://wiki.typo3.org/Faq/EM_and_STRONG

Code:

lib.parseFunc_RTE {# rewrites the tags - but not in ul and ol...
nonTypoTagStdWrap.HTMLparser=1
nonTypoTagStdWrap.HTMLparser{tags.b.remap = strong
tags.i.remap = em
}# this adds the rewriting to ul and ol but now there are ps wrapped around li...
externalBlocks {
ul.callRecursive=1
ul.callRecursive.tagStdWrap.HTMLparser=1
ol.callRecursive=1
ol.callRecursive.tagStdWrap.HTMLparser=1}# no more ps araound li...
nonTypoTagStdWrap.encapsLines.encapsTagList = div,p,pre,h1,h2,h3,h4,h5,h6,li
}