phpcalendarcodeigniter-3

Codeigniter calendar library to display the coresponding week number


I'm searching for a way to display the week number on the calendar. For now, I send the Year and Month to have a calendar created. I then repeat the code on the view if more calendars are needed.

I´m using the following preferences on my controller.

$prefs = array(
                'start_day'    => 'monday',
                'month_type'   => 'long',
                'day_type'     => 'abr'
                );

View:

$thisyear = $todaysdate->format('Y');

$thismonth = $todaysdate->format('m');

echo $this->calendar->generate($thisyear,$thismonth++);

Any idea of how to do this?

@the End I need :

April 2017

|We|Mo|Tu|We|Th|Fr|Sa|Su

|13 | | | | | | |1|2|

|14 |3|4|5|6|7|8|9|

|15 |10|11|12|13|14|15|16|

|16 |17|18|19|20|21|22|23|

|17 |24|25|26|27|28|29|30|


Solution

  • $("table tr").each(function() {
    	var myTd = $(this).find("td");
      
      var myContent = myTd.find("div[data-content]").data("content");
      if(myContent != undefined) {
      	$(myTd).first().text(myContent);
      }
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <table>
    <tbody>
    <tr>
    	<th></th>
    	<th colspan="7">Aprile&nbsp;2017</th>
    </tr>
    <tr>
    	<td>We</td>
    	<td>Lu</td>
    	<td>Ma</td>
    	<td>Me</td>
    	<td>Gi</td>
    	<td>Ve</td>
    	<td>Sa</td>
    	<td>Do</td>
    </tr>
    <tr>
    	<td></td>
    	<td><div>&nbsp;</div></td>
    	<td><div>&nbsp;</div></td>
    	<td><div>&nbsp;</div></td>
    	<td><div>&nbsp;</div></td>
    	<td><div>&nbsp;</div></td>
    	<td>
    		<div data-content="13">1</div>
    	</td>
    	<td>
            <div data-content="13">2</div>
    	</td>
    </tr>
    <tr>
    	<td></td>
    	<td>
    		<div data-content="14">3</div>
    	</td>
    	<td>
    		<div data-content="14">4</div>
    	</td>
    	<td>
    		<div data-content="14">5</div>
    	</td>
    	<td>
    		<div data-content="14">6</div>
    	</td>
    	<td>
    		<div data-content="14">7</div>
    	</td>
    	<td>
    		<div data-content="14">8</div>
    	</td>
    	<td>
    		<div data-content="14">9</div>
    	</td>
    </tr>
    <tr>
    	<td></td>
    	<td>
    		<div data-content="15">10</div>
    	</td><td>
    		<div data-content="15">11</div>
    	</td><td>
    		<div data-content="15">12</div>
    	</td><td>
    		<div data-content="15">13</div>
    	</td><td>
    		<div data-content="15">14</div>
    	</td><td>
    		<div data-content="15">15</div>
    	</td><td>
    		<div data-content="15">16</div>
    	</td>
    </tr>
    <tr>
    	<td></td>
    	<td>
    		<div data-content="16">17</div>
    	</td><td>
    		<div data-content="16">18</div>
    	</td><td>
    		<div data-content="16">19</div>
    	</td><td>
    		<div data-content="16">20</div>
    	</td><td>
    		<div data-content="16">21</div>
    	</td><td>
    		<div data-content="16">22</div>
    	</td><td>
    		<div data-content="16">23</div>
    	</td>
    </tr>
    <tr>
    	<td></td>
    	<td>
    		<div data-content="17">24</div>
    	</td><td>
    		<div data-content="17">25</div>
    	</td><td>
    		<div data-content="17">26</div>
    	</td><td>
    		<div data-content="17">27</div>
    	</td><td>
    		<div data-content="17">28</div>
    	</td><td>
    		<div data-content="17">29</div>
    	</td><td>
    		<div data-content="17">30</div>
    	</td>
    </tr>
    </tbody>
    </table>

    You can make a little hack, depending on the resources you have, javascript, jQuery or else.

    With this code you can generate a calendar with the week number like a parameter "data-content" on each TD and an added column for the week numbers. Then you can use jQuery to put the week value on the right TD.

    $this->load->library('calendar', array (
        'template' =>  '
            {table_open}<table>{/table_open}
            {heading_row_start}<tr>{/heading_row_start}
            {heading_previous_cell}<th><a href="{previous_url}">&lt;&lt;</a></th>{/heading_previous_cell}
            {heading_title_cell}<th></th><th colspan="{colspan}">{heading}</th>{/heading_title_cell}
            {heading_next_cell}<th><a href="{next_url}">&gt;&gt;</a></th>{/heading_next_cell}
            {heading_row_end}</tr>{/heading_row_end}
            {week_row_start}<tr><td>We</td>{/week_row_start}
            {week_day_cell}<td>{week_day}</td>{/week_day_cell}
            {week_row_end}</tr>{/week_row_end}
            {cal_row_start}<tr><td></td>{/cal_row_start}
            {cal_cell_start}<td>{/cal_cell_start}
            {cal_cell_content}
                <div data-content="{content}">{day}</div>
            {/cal_cell_content}
            {cal_cell_content_today}
                <div data-content="{content}">{day}</div>
            {/cal_cell_content_today}
            {cal_cell_no_content}{day}{/cal_cell_no_content}
            {cal_cell_no_content_today}<div>{day}</div>{/cal_cell_no_content_today}
            {cal_cell_blank}<div>&nbsp;</div>{/cal_cell_blank}
            {cal_cell_end}</td>{/cal_cell_end}
            {cal_row_end}</tr>{/cal_row_end}
            {table_close}</table>{/table_close}',
        'start_day'    => 'monday',
        'month_type'    => 'long',
        'day_type'    => 'abr',
        'show_next_prev'     => FALSE));
    
    
    
    list($num_days, $month, $year) = explode(' ', date("t n Y"));
    
    $array_days = [];
    
    for ($i = 1; $i <= $num_days; $i++)
    {
        $week = (int)date('W', mktime(0, 0, 0, $month, $i, $year));
        $array_days[$i] = "$week";
    }
    
    echo $this->calendar->generate($year, $month, $array_days);